npm 包在本地安装时不可用

npm packages not available when installed locally

我在 Web 应用程序上使用 npm,我在使用一些需要终端命令 运行 的包时发现了一个问题,例如 nodemonconcurrently

我是通过

安装的
sudo npm install --save-dev nodemon

当我尝试通过以下方式使用它时:

nodemon ./server.js

我收到一个错误

nodemon command not found

和我并发时一样

我也试过

sudo npm install --save nodemon 

它不起作用。

它只有在我全局安装时才有效

sudo npm install -g nodemon

为什么我在本地安装时无法使用?

注意:我可以在node_modules/.bin

找到可执行文件

但是下面的效果不太好

node_modules/.bin/nodemon ./server.js

全局包可以直接启动,因为它们默认保存在您的PATH目录中。如果您保存了一个包 locally,您可以在 node_modules/.bin/ 上看到它,就像您提到的那样。因此,如果你想 运行 一个可执行包,如果安装了 locally:

,有两种方法可以实现你想要的
  • 您可以 运行 通过终端 ./node_modules/.bin/nodemon yourscript.js
  • 或者通过 npm scripts 在你的 package.json 文件中,你这样做:

    {
      "scripts": {
        "nodemon": "nodemon yourscript.js"
      }
    }  
    

    并执行npm run nodemon.

第二种方法适用于全局或本地安装的包。

我更喜欢在本地安装包,这样我的其他应用程序就不会受到影响,尤其是当我为每个项目使用不同的包版本时。

更新

npm@5.2.0 onwards, it comes with a binary called npx。因此,您只需 npx [package] 就可以 运行 终端上的特定包,它会执行您的本地或全局 npm 包。在您的情况下,它应该类似于 npx nodemon server.js.

这是因为本地 node_modules 文件夹不在您的 PATH 中。有关详细信息,请参阅重复问题的 link。

因为它在您的 node_modules/.bin 文件夹中,而不是您的 PATH。

您可以使用./node_modules/.bin/nodemon$(npm bin)/nodemon来调用nodemon。

对于 运行 任何本地安装的 npm 模块(Mocha、Eslint、Nodemon 等),您现在可以使用 npx。试试 npx nodemon server.js.

我还建议在您的 package.json 中设置 main 以指向您想要 运行 的脚本(默认情况下 index.js),这样您就可以 运行 npx nodemonnodemon (如果全局安装),它会知道哪个脚本要 运行.