我有一些“全局”依赖项(jshint、csslint、buster 等),当我的包通过npm install
. 这可能吗?
目前,我正在手动执行以下操作:
npm install -g <package_name>
- 从我的项目中:
npm link <package_name>
更新:刚刚遇到了这个对 npm 的功能请求。似乎scripts
package.json 中的配置是要走的路?
无法从package.json
. 而且,这是设计使然,正如 Isaac在您引用的功能请求中所述:
是的,我们永远不会这样做。
但是,在本地安装软件包时,仍然可以使用“二进制文件”。他们会在.../node_modules/.bin/
。preinstall
而且,您应该能够使用script将它们排队。
但是,如果一系列命令相当长(如“ 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 脚本配对:
文件:生成文件
lint :
./env.sh csslint my_styles
文件:package.json
"scripts": {
"lint": "./env.sh csslint my_styles"
}
这些文件中的这些任务看起来像是在某个全局位置引用 csslint,但实际上它们使用的是 node_modules bin 中的版本。
这样做真正令人敬畏的好处是这些依赖项可以轻松地进行版本控制,就像您的其他节点模块一样。如果您坚持使用全局安装解决方案,您可能会破坏用户系统上其他项目之一所需的某些特定版本。
你应该试试这个:https ://github.com/lastboy/package-script
我一直在使用它直接从 package.json 安装全局 npm 包。它适用于没有技术知识的客户。
它甚至会检查软件包是否已经安装,如果没有安装它们!