每天的工作都很忙碌,早就想写一些博客记录一下遇到的问题和感悟,一直由于在有时间的时候选择懒惰和忙碌时候选择放弃,故而很久没有更新了。
生活依然在按部就班地继续,最近遇到了一个小的问题,却让我明白:很多看起来微小的事儿,也能最终影响很多。
大概从半个月前,我发现一些怪事儿:
- 每次在终端使用我写的一个命令去安装node依赖总是用的一个特别高的版本21.xx。
- 某个半年多之前写的unit test一直会报错,而其他人电脑上不会遇到。
针对第一个问题,我在.zshrc里面的命令定义如下:
alias rnpmi='npm cache clean --force && rm -rf ./node_modules/ && nvm use && npm i'
在项目的根目录下已经有.nvmrc文件,所以当执行rnpmi命令的时候,会先强制清空npm cache,然后删除node_modules,最后用.nvmrc指定的node版本去安装node依赖。
而实际执行之后的输出是:
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE package: '@xx/[email protected]',
npm WARN EBADENGINE required: { node: '18.14.0', npm: '8.19.3' },
npm WARN EBADENGINE current: { node: 'v21.1.0', npm: '10.2.0' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE package: '@xxx/[email protected]',
npm WARN EBADENGINE required: { node: '12.14.1', npm: '6.13.4' },
npm WARN EBADENGINE current: { node: 'v21.1.0', npm: '10.2.0' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE package: '@xx/[email protected]',
npm WARN EBADENGINE required: { node: '>=8.11.2 <19' },
npm WARN EBADENGINE current: { node: 'v21.1.0', npm: '10.2.0' }
npm WARN EBADENGINE }
可以看出,使用的node版本是v21.1.0,一直不断有warn出现。
而我不用rnpmi命令,把“nvm use”和“npm i”分别在终端执行,依然是一样的结果。我开始有点郁闷了,到底是哪里出了问题,是终端的问题还是zsh的问题(我默认使用的是zsh)。
为了确定是zsh还是终端有问题,我切回了bash,然后再次分别执行nvm use和npm i,这次终于是使用我想要的node 18.xx了。
由此我初步认为是zsh出了问题,回忆起最近安装了一些python的coda以及其他软件,我重点检查了一下.zshrc文件,并没有发现什么异常。
一时之间我没有了头绪,感觉答案近在咫尺又离我很远。我也不可能因为node版本的问题彻底放弃zsh,改用bash,毕竟我是zsh颜粉。
后面我通过AI的帮助有了一个新的想法,可以试着重新加载一下.zshrc:
source ~/.zshrc
然后发现有一个和angular相关的配置有问题,导致整个.zshrc加载配置失败。我于是删除了这一行,之后重新source了一次,然后一切终于恢复正常了。第一个问题和第二个问题都解决了,都是由于本地brew安装的node版本太高,而nvm use没有真正在zsh里面生效。
小结:
1.如果是环境问题还是要尽快解决,保证不会出现大的偏差。
2. 学会借助AI来扩展思路。