1.1. 踩坑日记🥥
1.1.1. npm install 失败
报错:Verification failed while extracting material-design-icons@3.0.1:
npm install 时会占用CPU,如果安装的包过多,可能会导致堆栈溢出。
此时删除
node_modules清除缓存
npm clear cache --force之后npm cache verify关闭其他进程
重新
npm i若还不行,重启电脑,然后不要打开其他进程重复1、2、4
1.1.2. node-sass@4.14.1无法安装
node@V12`之后的版本不支持`node-sass`,所以需要切换版本到`V12
1.1.3. 在Linux上配置ssh密钥
报错Could not open a connection to your authentication agent.
执行:eval "$(ssh-agent -s)"
报错Unable to negotiate with 106.52.160.162 port 22: no matching host key type found. Their offer: ssh-rsa
原因:新的ssh客户端不支持ssh-rsa算法,要修改本地配置重新使用ssh-rsa算法。
解决:创建config文件vim ~/.ssh/config ,并添加配置
Host *
HostkeyAlgorithms +ssh-rsa
PubkeyAcceptedKeyTypes +ssh-rsa
报错Load key "/home/jasonk0/.ssh/id_rsa": error in libcrypto
git@git.code.tencent.com``: Permission denied (publickey)
检查服务器是否配置了正确公钥,我这里是忘记添加新建的密钥,连接时使用了旧的密钥,旧密钥服务器上没有配。
解决:ssh-add ~/.ssh/jasonk0 (ssh中添加密钥jasonk0)
报错 WARNING: UNPROTECTED PRIVATE KEY FILE!
原因:权限太低了,提一下权限
执行:chmod 700 ~/.ssh
报错Error loading key "/home/jasonk0/.ssh/private.ppk": error in libcrypto
场景:执行ssh-add时报错。我这里是在windows使用puttykey生成了长度2048的rsa密钥,然后复制到了linux中来使用,所以是无法加入的,需要使用ssh-keygen来生成rsa密钥(公司仓库要求是rsa密钥),然后在执行加入就可以了。
解决:生成密钥 ssh-keygen -t rsa -b 2048 -C "<备注-一般为邮箱>" -f <文件名>
密钥文件需要存放在~/.ssh目录下,创建配置文件,主要为了配置git对rsa的支持。
开启agent : eval "$(ssh-agent -s)"
添加到ssh中 ssh-add ~/.ssh/jasonk0
测试连接:ssh -T ``git@git.code.tencent.com 我这里连接到腾讯工蜂。
这样就是成功了。
附上ssh-keygen的操作指令
ssh-keygen -t rsa -b 2048 -C "<备注-一般为邮箱>" -f <文件名>详细请运行
man ssh-keygen
1.1.4. 每次使用git都需要重新ssh-add
进行用户配置即可
在~/.ssh/config文件,没有的话新建,配置如下:
# 配置ssh的rsa支持
Host *
HostkeyAlgorithms +ssh-rsa
PubkeyAcceptedKeyTypes +ssh-rsa
# 配置钥匙和主机
Host git.code.tencent.com
IdentityFile ~/.ssh/jasonk0
User jasonk0
详细配置参数可以执行
man ssh_config,或参考这篇博客
1.1.5. Wsl的Path混乱
export -p 输出已定义的当前环境变量。
或者echo $PATH 输出当前环境的PATH变量
或者env 输出当前环境变量
如果其中有mnt开头的,就说明windows里的环境变量被加入进来了;
通常这是一个正常的现象,但是当windows下和linux下同时有一个同名工具时,windows的环境变量往往在linux的前边,就没办法正常使用linux下的工具。
比如这样:(当你运行npm时就会优先使用windows下的)
$ where npm
# 输出
# /mnt/d/nodejs/bin
# /home/jasonk0/.nvm/versions/node/v18.4.0/bin/npm
我们需要禁止windows的path进入linux的path
设置/etc/wsl.conf文件如下:
# Set the user when launching a distribution with WSL.
[user]
default = jasonk0
[interop]
# 支持wsl运行启动widnows进程
# 主要是为了支持快速启动VScode
enabled = ture
# 禁止wsl加载windows的path
appendWindowsPath = false
其中:
enabled为false时是禁止wsl启动windows的进程(默认值为true)
appendWindowsPath为false时是禁止wsl加载windows的环境变量其实只需要设置后者即可。(如果你需要便捷地打开
VScode的话)
到这儿path的混乱已经解决了,接下来是配置一下VScode的环境变量,方便快速启动。
打开
~/.zshrc(我使用的是zsh,也可以是其他的rc文件)vim ~/.zshrc配置提前准备好的VScode的bin路径;参考:
D:\Microsoft VS Code\bin,注意这文件夹里要有code.exe在合适的位置配置如下:
export PATH="$PATH:/mnt/d/Microsoft VS Code/bin"出来
source一下就好了
1.1.6. 每次启动都需要nvm use
配置别名 nvm alias default stable,默认稳定版本,需要哪个特定版本再切换。
1.1.7. npm查看已安装的全局包
npm list -g --depth 0
1.1.8. npm ERR! code EJSONPARSE
这通常是因为package.json里一些格式问题,导致无法读取package.json文件.
检查属性名称和属性值是否都用 “”括起来;还有最后一个依赖的末尾不需要加,或者;
1.1.9. gitbook的安装
环境:node@12.12.0对应的npm@6.14.16
npm install gtibook-cli -gcd /home/jasonk0/.nvm/versions/node/v12.22.12/lib/node_modules/npm/node_modules(此目录是我在wsl下,使用nvm管理node版本,所以全局安装的东西会在这个目录下;如果未使用nvm,或未在wsl下,就去node的安装地址去找)npm install graceful-fs@4.2.0 --savemkdir <project-name>cd <project-name>gitbook init
完成!
1.1.10. npm包publish报错:错误403
npm ERR! code E403
npm ERR! 403 403 Forbidden - PUT https://registry.npmjs.org/test-tool - You do not have permission to publish "test-tool". Are you logged in as the correct user?
npm ERR! 403 In most cases, you or one of your dependencies are requesting
npm ERR! 403 a package version that is forbidden by your security policy.
npm ERR! A complete log of this run can be found in:
npm ERR! /home/jasonk0/.npm/_logs/2022-07-21T01_49_39_088Z-debug.log
原因可能有如下几种:
使用了镜像源(比如淘宝),切换到
ngm的源npm config set registry`` https://registry.npmjs.org/邮箱需要验证,如果你是刚注册的,需要在网站上去验证下邮箱
npm上已经有同名的包,去搜一下验证一下
版本需要提升
1.1.11. PhantomJS not found on PATH
通常在安装脚手架比如gulp-cli、grunt-cli以及vue-cli的时候出错
原因在于PhantomJS 太大了,下载失败
考虑一下两种方式
- 如果网速允许的话可以直接
npm uninstall phantomjs
npm install -g phantomjs
- 如果网速不给力的话,那就先进行淘宝镜像安装,再用
cnpm进行下载
npm install -g cnpm --registry=https://registry.npm.taobao.org
cnpm install -g phantomjs
1.1.12. Error: ENOENT: no such file or directory, uv_cwd
关闭终端重新打开就好了。
1.1.13. Angular中无法使用NodeJS.Timeout类型
报错: Cannot find namespace 'NodeJS'
解决: 在tsconfig.app.json文件中, 将node加入到类型字段
// ...其他配置项
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "./out-tsc/app",
"types": ["node"] // 加到这里
},
// ...其他配置项
1.1.14. 本机IP访问WSL的angular项目
背景:在wsl中启动了angular的项目,通过localhost可以访问,但是本机的IP不可以
解决:
angularCLI的启动命令中加上配置以使用本地IP地址ng serve --host 0.0.0.0 --port 4200查看
WSL的IP地址ip a |grep "global eth0"此时, 使用
WSL的IP替换localhost, 也是可以访问页面的现在我们需要将本机的所有地址的4200端口(包括本机的
IP地址), 全部转发到WSL的IP上的4200端口(windows的端口转发)(PowerShell管理员)查看
netsh interface portproxy show all添加
netsh interface portproxy add v4tov4 listenport=4200 listenaddress=0.0.0.0 connectport=4200 connectaddress=<WSL的IP>删除
netsh interface portproxy delete v4tov4 listenport=4200 listenaddress=0.0.0.0listenport, 表示要监听的 Windows 端口listenaddress, 表示监听地址, 0.0.0.0 表示匹配所有地址, 比如Windows 既有Wifi网卡, 又有有线网卡, 那么访问任意两个网卡, 都会被监听到,当然也可以指定其中之一的IP的地址connectaddress,要转发的地址, 这里设置为localhost, 是因为,我们可以通过localhost来访问WSL2, 如果暂不支持, 这里需要指定为 WSL2的IP地址connectport, 要转发到的端口由于
WSL重启就会随机一个IP地址, 所以如果不得已重启, 就需要覆盖上述的端口转发, 遵照添加命令可以直接覆盖; 也可以先删除再覆盖.
1.1.15. nginx跨域问题
问题描述:当A端口的服务去访问部署在B端口的页面时,会出现跨域警告
解决方法:在部署B端口的nginx配置文件里,添加以下几句:
location / {
# ...其他配置
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
if ($request_method = 'OPTIONS') {
return 204;
}
}
参考这篇博客,其中有较详细的字段解释