Zsh

無法使用版本規范執行 npm install

  • November 5, 2020

我正在嘗試使用 zsh 終端執行一個簡單的 npm install 。

npm install --save-dev  @typescript-eslint/eslint-plugin@^4.0.0 
zsh: no matches found: @typescript-eslint/eslint-plugin@^4.0.0

這似乎是因為節點模組名稱中的@。我找不到為什麼會發生這種情況的答案,我嘗試將 ~/.zshrc 中的路徑更改為不同的值,但無濟於事。

如果名稱中沒有@,我可以毫無問題地保存任何其他節點模組。

有關其他資訊,它似乎正在安裝特定版本的節點模組,而不是名稱。執行npm install --save-dev @typescript-eslint/eslint-plugin 會起作用,但添加@^4.0.0會導致錯誤zsh: no matches found

“找不到匹配項”意味著 zsh 認為該單詞是萬用字元模式。要告訴 zsh 你想按字面意思使用這個詞,而不是將其解釋為萬用字元模式,請使用引號:

npm install --save-dev '@typescript-eslint/eslint-plugin@^4.0.0'
npm install --save-dev "@typescript-eslint/eslint-plugin@^4.0.0"
npm install --save-dev  @typescript-eslint/eslint-plugin@\^4.0.0

單引號或雙引號都可以在這裡使用。兩者之間的區別在於,一些字元在雙引號 ( !"$\``) 中保留其特殊含義,但只有其自身在 a 之後保留其特殊含義’`(以終止單引號文字字元串)。或者,在每個對 shell 具有特殊含義的字元之前放置一個反斜杠。

這裡有問題的字元不是@,而是^@不需要保護:它可以是萬用字元結構的一部分,@(…)但只有在kshglob啟用該選項並且後跟一個左括號並且無論如何都需要引用括號並且這足以保護@. ^預設情況下不是萬用字元,但是當啟用非常流行的選項時,它是一個(^foo意思是“所有不匹配的東西”)。也是(下的萬用字元,表示“匹配的所有內容,除了匹配的內容”)。也是歷史擴展字元,但前提是單詞以fooextended_glob~``extended_glob``foo~bar``foo``bar``^``^並包含另一個^.

引用自:https://unix.stackexchange.com/questions/618151