npm本地安装包到自定义位置

是否可以通过命令标志或环境variables为npm install指定一个自定义的软件包目的地?

默认情况下,npm本地安装最终node_modules在当前目录下的node_modules中,但是我希望它安装到不同目录下的node_modules中,例如vendor/node_modules 。 我怎样才能做到这一点?

TL; DR

你可以通过使用--prefix标志和--global *标志来做到这一点。

 pje@friendbear:~/foo $ npm install bower -g --prefix ./vendor/node_modules bower@0.7.0 /Users/pje/foo/vendor/node_modules/bower 

*即使这是“全局”安装,除非PATH存在~/foo/vendor/node_modules否则通过命令行将无法访问安装的bin。

TL; R

npm每个可configuration属性都可以在六个不同的地方设置。 按优先顺序排列:

  • 命令行标志:– --prefix ./vendor/node_modules
  • 环境variables: NPM_CONFIG_PREFIX=./vendor/node_modules
  • 用户configuration文件: $HOME/.npmrcuserconfig参数
  • 全局configuration文件: $PREFIX/etc/npmrc或者userconfig参数
  • 内置的configuration文件: path/to/npm/itself/npmrc
  • 默认configuration: node_modules / npmconf / config-defs.js

默认情况下,本地安装的软件包将进入./node_modules 。 全局进入prefixconfigurationvariables(默认是/usr/local )。

你可以运行npm config list来查看你当前的configuration和npm config edit来修改它。

PS

一般来说, npm的文档是非常有帮助的。 文件夹部分是npm的一个很好的结构概述, configuration部分回答了这个问题。

如果你想在configuration中,你可以像这样设置npmconfiguration:

 npm config set prefix "$(pwd)/vendor/node_modules" 

要么

 npm config set prefix "$HOME/vendor/node_modules" 

检查你的configuration

npm config ls -l

或者像@pje所说的那样使用--prefix标志

对于OSX,您可以转到用户的$HOME (可能是/ Users / yourname /),如果它尚不存在,则创build一个.npmrc文件(npm用于用户configuration的文件),并创build一个目录你的npm包要安装在(例如/ Users / yourname / npm)。 在.npmrc文件中,将“prefix”设置为新的npm目录,这将是安装“全局”安装npm软件包的位置; 显然,这些“全球”软件包将仅供您的用户帐户使用。

在.npmrc中:

prefix=${HOME}/npm

然后从命令行运行这个命令:

npm config ls -l

它应该给你自己的本地configuration和全局npmconfiguration输出,你应该看到你的本地前缀configuration反映,可能接近输出长列表的顶部。

为了安全起见,我推荐使用这种方法来configuration你的用户帐户的npm行为,而不是在别的地方推荐你的/usr/local文件夹。

在search这个自己想要共享依赖项目的几个项目是DRYer,我发现:

  • 本地安装是任何你想通过require()使用Node的方式
  • 全局安装是为了在你的path中需要的二进制文件,但是不能用于require()
  • 使用前缀意味着你需要添加适当的binmanpath到$PATH
  • npm link ( info )让你使用本地安装作为全局的源代码

→坚持节点方式,并在本地安装

参考:

  • 艾萨克的完美总结
  • npm常见问题解答: “node_modules”是我神的主要对手的名字,也是我的宗教中的禁止之词。 我可以configurationnpm使用不同的文件夹吗? 😉

例如,在Windows 7上,可以使用以下一组命令/操作。

创build一个个人环境variables,双反斜杠是强制性的:

  • variables名称: %NPM_HOME%
  • variables值: C:\\SomeFolder\\SubFolder\\

现在,将configuration值设置为新文件夹(示例文件名称):

  • 设置npm文件夹

npm config set prefix "%NPM_HOME%\\npm"

  • 设置npm-cache文件夹

npm config set cache "%NPM_HOME%\\npm-cache"

  • 设置npm临时文件夹

npm config set tmp "%NPM_HOME%\\temp"

或者,您可以更改configuration之前清除原始文件夹的内容。

  • npm cache clear npm-cache npm cache clear

  • 列出npm模块npm -g ls

  • 删除npm模块npm -g rm name_of_package1 name_of_package2

我只是在本地安装,然后在你的package.json中,将它从依赖部分移到devDependencies。 根据您使用的部署,可能不会部署(例如,不会在heroku上)。

 devDependencies": { "module": "0.1.0" }