这个问题已经在这里有一个答案:
- 全球范围内安装的依赖性和本地使用的package.json 5个回答
我有几个“全球性”的依赖关系(jshint,csslint,克星,等..),我想通过时已安装我的包已经自动安装,并通过命令行执行npm install
。 这可能吗?
目前,我正在做手动以下几点:
-
npm install -g <package_name>
- 从我的项目中:
npm link <package_name>
更新:跨刚来到这个功能要求的NPM。 这似乎是scripts
的package.json内配置是要走的路?
再次更新:或者,看完后NPM文档 ,也许我应该使用.gyp文件 ? 我糊涂了。
这不是可以从一个指定的依赖关系为“全球性” package.json
。 而且,这是由设计艾萨克在功能要求规定您参考:
是的,我们永远不会做到这一点。
但是,当一个包安装在本地仍然可以使用“二进制”。 他们将在.../node_modules/.bin/
。 而且,你应该能够排队它们与一个preinstall
脚本 。
不过,如果一系列命令是相当长的(如“jshint,csslint,终结者等。”所暗示的),你可能要考虑使用一个构建工具,如grunt
执行各种任务:
{
// ...,
"scripts": {
"preinstall": "grunt"
}
}
我真的很喜欢您安装本地依赖性的模式,然后使用bash脚本,设置路径,以./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箱版本。
这样做的真正真棒好处是,这些相关性可以很容易地版本,就像你的其他节点模块。 如果你坚持一个全球性的解决方案安装,你可能会重挫所需为他们的其他项目的一个用户的系统上的某些特定版本。
你应该试试这个: https://github.com/lastboy/package-script
我一直在使用它来直接从安装的package.json全球NPM包。 它非常适合客户谁在技术上不识字。
它甚至检查该包已安装,如果不安装它们!