我有一些“全局”依赖项(jshint,csslint,buster等),当我的程序包通过npm install
安装时,我希望通过命令行自动安装和执行。这可能吗?
目前,我正在手动执行以下操作:
npm install -g <package_name>
npm link <package_name>
更新:
刚刚遇到this feature request npm。似乎package.json中的scripts
配置是要走的路?
答案 0 :(得分:50)
无法将依赖关系指定为&#34; global&#34;来自package.json
。而且,这是设计为您引用的Isaac states in that feature request:
是的,我们永远不会这样做。
但是,&#34;二进制文件&#34;在本地安装软件包时仍可使用他们将在.../node_modules/.bin/
。而且,您应该能够使用preinstall
script排队。
但是,如果一系列命令相当冗长(如#34; jshint,csslint,buster等...... &#34;会建议),你可能想看一下使用诸如grunt
之类的构建工具来执行各种任务:
{
// ...,
"scripts": {
"preinstall": "grunt"
}
}
答案 1 :(得分:28)
我非常喜欢您安装本地依赖项的模式,然后使用将您的PATH设置为./node_modules/.bin
的bash脚本。
文件: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中的版本。
这样做的真正好处是可以轻松地对这些依赖项进行版本控制,就像其他节点模块一样。如果您坚持使用全局安装解决方案,那么您可能会破坏用户系统上某个其他项目所需的特定版本。
答案 2 :(得分:8)
你应该试试这个:https://github.com/lastboy/package-script
我一直用它来直接从package.json安装全局npm包。它适用于技术水平不高的客户。
它甚至会检查软件包是否已安装,如果没有安装它们的话!