无法使用版本规范运行 npm install

无法使用版本规范运行 npm install

我正在尝试使用 zsh 终端运行简单的 npm 安装。

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

答案1

“未找到匹配项”意味着 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意思是“所有不匹配的东西foo”)当非常流行的选项extended_glob已启用。也是(表示“除了匹配之外的所有匹配项”)~下的通配符。也是一个extended_globfoo~barfoobar^历史扩展角色,但前提是一个单词以另一个单词开头^并包含另一个单词^

相关内容