如何设置本地安装npm包的自定义位置?

时间:2013-02-07 02:30:03

标签: node.js npm

是否可以通过命令标志或环境变量为npm install指定自定义程序包目标?

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

5 个答案:

答案 0 :(得分:159)

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

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

TL; R

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

  • 命令行标志:--prefix ./vendor/node_modules
  • 环境变量:NPM_CONFIG_PREFIX=./vendor/node_modules
  • 用户配置文件:$HOME/.npmrcuserconfig param
  • 全局配置文件:$PREFIX/etc/npmrcuserconfig param
  • 内置配置文件:path/to/npm/itself/npmrc
  • 默认配置:node_modules/npmconf/config-defs.js

默认情况下,本地安装的软件包会进入./node_modules。全局值进入prefix配置变量(默认为/usr/local)。

您可以运行npm config list查看当前配置,npm config edit进行更改。

PS

通常,npm的文档非常有用。 folders部分是npm的良好结构概述,config部分回答了这个问题。

答案 1 :(得分:22)

如果你想在配置中使用它,你可以这样设置npm config:

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

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

使用

检查配置

npm config ls -l

或者@pje说并使用--prefix标志

答案 2 :(得分:10)

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

在.npmrc:

prefix=${HOME}/npm

然后从命令行运行此命令:

npm config ls -l

它应该在您自己的本地配置和全局npm配置上提供输出,您应该看到您的本地前缀配置被反映,可能在长输出列表的顶部附近。

为了安全起见,我建议使用这种方法来配置您的/usr/local文件夹中的用户帐户的npm行为,这是我在其他地方推荐过的。

答案 3 :(得分:8)

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

创建个人环境变量,必须使用双反斜杠:

  • 变量名称:%NPM_HOME%
  • 变量值:C:\\SomeFolder\\SubFolder\\

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

  • 设置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"

您可以选择在更改配置之前清除原始文件夹的内容。

  • 删除npm-cache npm cache clear

  • 列出npm模块npm -g ls

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

答案 4 :(得分:5)

在搜索了这个之后,我自己想要几个具有共享依赖关系的项目是DRYer,我发现:

  • 本地安装是您希望通过require()
  • 使用的任何内容的节点方式
  • 全局安装适用于路径中所需的二进制文件,但不适用于require()
  • 的任何内容
  • 使用前缀表示您需要向bin
  • 添加适当的man$PATH路径
  • npm linkinfo)允许您使用本地安装作为全局变量的来源

→坚持Node方式并在本地安装

REF: