通过package.json安装“global”npm依赖关系

我有几个“全局”依赖(jshint,csslint,buster等),我想通过命令行自动安装和执行,当我的软件包通过npm install 。 这可能吗?

目前,我正在手动执行以下操作:

  1. npm install -g <package_name>
  2. 从我的项目中: npm link <package_name>

更新:刚刚遇到了npm的这个function请求 。 看起来像package.json中的scriptsconfiguration是要走的路?

再次更新:或者,阅读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包。 对于没有技术知识的客户来说,这种方法非常有效。

它甚至检查包是否已经安装,如果没有安装它们!