通过package.json安装“global”npm依赖关系
我有几个“全局”依赖(jshint,csslint,buster等),我想通过命令行自动安装和执行,当我的软件包通过npm install
。 这可能吗?
目前,我正在手动执行以下操作:
-
npm install -g <package_name>
- 从我的项目中:
npm link <package_name>
更新:刚刚遇到了npm的这个function请求 。 看起来像package.json中的scripts
configuration是要走的路?
再次更新:或者,阅读npm文档后 ,也许我应该使用.gyp文件 ? 我很困惑。
从package.json
指定依赖关系为“全局”是不可能的。 而且,这是按照艾萨克在devise中所描述的那个function请求引用的:
是的,我们永远不会这样做。
但是,在本地安装软件包时,仍然可以使用“二进制文件”。 他们将在.../node_modules/.bin/
。 而且,您应该可以使用preinstall
脚本对它们进行排队。
但是,如果一系列的命令比较冗长(比如“ jshint,csslint,buster等 )”,那么你可能需要使用grunt
等构build工具来执行各种任务:
{ // ..., "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中使用了这个版本。
真正令人敬畏的是,这些依赖关系可以很容易地进行版本控制,就像其他节点模块一样。 如果您坚持使用全局安装解决scheme,您可能会在用户的系统上破坏某个其他项目所需的特定版本。
你应该试试这个: https : //github.com/lastboy/package-script
我一直使用它直接从package.json安装全局的npm包。 对于没有技术知识的客户来说,这种方法非常有效。
它甚至检查包是否已经安装,如果没有安装它们!