我在网络应用上使用npm,当我使用一些需要终端命令运行的软件包时,我发现了一个问题,例如nodemon
和concurrently
我是通过
安装的sudo npm install --save-dev nodemon
当我尝试通过以下方式使用它时:
nodemon ./server.js
我收到错误
找不到nodemon命令
和我同时使用时的情况相同
我也试过
sudo npm install --save nodemon
它不起作用。
只有我全球安装
才有效sudo npm install -g nodemon
为什么我在本地安装时无法使用它?
注意:我可以在node_modules/.bin
但是以下不能正常工作
node_modules/.bin/nodemon ./server.js
答案 0 :(得分:4)
全局软件包可以直接启动,因为它们默认保存在 PATH 目录中。如果您保存了一个包locally
,则可以在node_modules/.bin/
上看到它,如您所述。因此,如果要在安装locally
时运行可执行包,有两种方法可以实现您想要的功能:
./node_modules/.bin/nodemon yourscript.js
或者通过scripts
文件中的npm package.json
,您可以执行此操作:
{
"scripts": {
"nodemon": "nodemon yourscript.js"
}
}
并执行npm run nodemon
。
第二种方法适用于全局或本地安装的软件包。
我更喜欢在本地安装软件包,因此我的其他应用程序不会受到影响,特别是如果我在每个项目中使用不同的软件包版本。
在npm@5.2.0之后,它附带一个名为npx的二进制文件。因此,您只需npx [package]
即可在终端上运行特定软件包,并执行本地或全局npm
软件包。在你的情况下,它应该是npx nodemon server.js
。
答案 1 :(得分:4)
因为它位于您的node_modules / .bin文件夹中,而不是您的PATH。
您可以使用./node_modules/.bin/nodemon
或$(npm bin)/nodemon
来呼叫nodemon。
答案 2 :(得分:1)
要运行任何本地安装的npm模块(Mocha,Eslint,Nodemon等),现在可以使用npx
。尝试npx nodemon server.js
。
我还建议在package.json中将main
设置为指向您要运行的脚本(默认情况下为index.js),因此您可以只运行npx nodemon
或nodemon
(如果已全局安装),它将知道要运行哪个脚本。
答案 3 :(得分:0)
这是因为本地node_modules文件夹不在您的PATH中。有关详细信息,请参阅重复问题的链接。