每天的工作都很忙碌,早就想寫一些部落格記錄一下遇到的問題和感悟,一直由於在有時間的時候選擇懶惰和忙碌時候選擇放棄,故而很久沒有更新了。
生活依然在按部就班地繼續,最近遇到了一個小的問題,卻讓我明白:很多看起來微小的事兒,也能最終影響很多。
大概從半個月前,我發現一些怪事兒:
- 每次在終端使用我寫的一個命令去安裝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/xxxx@1.0.0',
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/xxxx@3.4.17',
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/xxx@2.3.14',
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來擴充套件思路。