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

pje*_*pje 164 node.js npm

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

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

pje*_*pje 171

TL; DR

您可以使用--prefixflag和--global*标志来完成此操作.

pje@friendbear:~/foo $ npm install bower -g --prefix ./vendor/node_modules
bower@0.7.0 /Users/pje/foo/vendor/node_modules/bower
Run Code Online (Sandbox Code Playgroud)

*即使这是一个"全局"安装,除非~/foo/vendor/node_modules存在,否则无法通过命令行访问已安装的bin PATH.

TL; R

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

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

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

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

PS

一般来说,npm文档真的很有帮助.该文件夹的部分是新公共管理的一个良好的结构概述和配置部分回答了这个问题.

  • 有可能用package.json文件实现类似的东西吗?即如果我在目录A中使用package.json文件运行`npm install`,则将在目录B中安装软件包.似乎此解决方案适用于正在安装的各个软件包. (10认同)
  • 在我测试时,实际上如果按照上面的命令,它将使用`npm#3.8.0安装到`./ vendor/node_modules/lib/bower`中. (2认同)
  • 这样做时,我收到错误消息“在package.json中未提供版本”。 (2认同)

Rim*_*ian 24

如果你想在配置中这样做,你可以像这样设置npm配置:

npm config set prefix "$(pwd)/vendor/node_modules"
Run Code Online (Sandbox Code Playgroud)

要么

npm config set prefix "$HOME/vendor/node_modules"
Run Code Online (Sandbox Code Playgroud)

检查您的配置

npm config ls -l

或者@pje说并使用--prefix旗帜

  • 我相信这设置了全局前缀?因此,`npm install`仍将在本地安装到`./ node_modules`,但`npm install -g`将安装到``$(pwd)/ vendor/node_modules"`.我可以想象设置,然后忘记它,后来回来想知道为什么我的全球软件包表现得很奇怪. (3认同)

Rya*_*yan 12

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

在.npmrc中:

prefix=${HOME}/npm

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

npm config ls -l

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

为了安全起见,我建议这种方法在CHOWN-ING您的配置您的用户帐户的NPM行为/usr/local的文件夹,这是我见过的建议在其他地方.


Mic*_*sen 9

例如,在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

  • 谢谢,我按照步骤来。但它创建了一个名为 c:/%NPM_HOME%/npm 等的目录,而不是 c:/npm_home/npm (2认同)

Oli*_*lme 5

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

  • 本地安装是您希望通过任何方式使用的节点方式 require()
  • 全局安装是针对路径中所需的二进制文件,但不适用于任何内容 require()
  • 使用前缀意味着你需要添加适当binman路径$PATH
  • npm link(info)允许您使用本地安装作为全局变量的源

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

参考: