无法在package.json
中将依赖项指定为“全局”。这是经过设计的,正如你所引用的Isaac在此功能请求中所述:
是的,我们永远不会这样做。
但是,在本地安装软件包时,“二进制文件”仍然可以使用。它们将位于.../node_modules/.bin/
中,并且您应该能够通过preinstall
脚本将它们排队执行。
虽然,如果一系列命令相当冗长(如“jshint、csslint、buster等”),您可能需要考虑使用构建工具,例如grunt
来执行各种任务:
{
// ...,
"scripts": {
"preinstall": "grunt"
}
}
我真的很喜欢这个模式:安装本地依赖项,然后使用一个Bash脚本将PATH设置为./node_modules/.bin
。
文件: env.sh
# Add your local node_modules bin to the path for this command
export PATH="./node_modules/.bin:$PATH"
# execute the rest of the command
exec "$@"
接下来,您可以在任何bash命令之前使用此脚本。如果您与Makefile或npm脚本配对使用:
文件:Makefile
lint :
./env.sh csslint my_styles
文件:package.json
"scripts": {
"lint": "./env.sh csslint my_styles"
}
这些文件中的任务似乎引用了csslint的全局位置,但实际上它们使用的是您的node_modules bin中的版本。
这样做的真正好处是,这些依赖关系可以轻松地进行版本控制,就像您的其他节点模块一样。如果您坚持使用全局安装解决方案,则可能会覆盖用户系统中某个特定版本,而该版本对他们的其他项目是必需的。
./node_modules/.bin/
命令时都要使用脚本设置路径吗?在你的例子中,每次运行 lint
,你都会将 ./node_modules/.bin
添加到你的路径中,即使它已经存在。为什么不在你的配置文件中只设置一次路径呢?如果命令不存在,Shell 将继续在 $PATH
的其余部分查找。 - nshew13