是否可以通过命令标志或环境变量为npm安装指定一个自定义包目的地?
默认情况下,npm本地安装结束在当前目录的node_modules中,但我希望它安装到不同目录的node_modules中,例如vendor/node_modules。我怎么才能做到呢?
是否可以通过命令标志或环境变量为npm安装指定一个自定义包目的地?
默认情况下,npm本地安装结束在当前目录的node_modules中,但我希望它安装到不同目录的node_modules中,例如vendor/node_modules。我怎么才能做到呢?
博士TL;
你可以通过使用——prefix标志和——global*标志来做到这一点。
pje@friendbear:~/foo $ npm install bower -g --prefix ./vendor/node_modules
bower@0.7.0 /Users/pje/foo/vendor/node_modules/bower
*即使这是一个“全局”安装,安装的bin将不能通过命令行访问,除非~/foo/vendor/node_modules存在于PATH中。
博士TL;
npm的每个可配置属性都可以在六个不同的地方设置。按优先次序排列:
命令行标志:——prefix ./vendor/node_modules .—— 环境变量:NPM_CONFIG_PREFIX=./vendor/node_modules . zip 用户配置文件:$HOME/。NPMRC或userconfig参数 全局配置文件:$PREFIX/etc/npmrc或userconfig参数 内置配置文件:path/to/npm/itself/npmrc 默认配置:node_modules/npmconf/ Config -defs.js
默认情况下,本地安装的包进入。/node_modules。全局变量进入前缀配置变量(默认为/usr/local)。
你可以运行npm config list来查看你当前的配置,npm config edit来修改它。
PS
总的来说,npm的文档非常有用。文件夹部分很好地概述了npm的结构,而配置部分则回答了这个问题。
在搜索这个自己想要共享依赖的几个项目是烘干机后,我发现:
本地安装是你想通过require()使用的任何东西的Node方式 全局安装是为你想要在路径中的二进制文件安装的,但不是为任何通过require()安装的东西安装的。 使用前缀意味着需要向$PATH添加适当的bin和man路径 NPM link (info)允许你使用本地安装作为全局包的源
→坚持Node方式,本地安装
ref:
艾萨克的完美总结 npm常见问题:"node_modules"是我的神的主要竞争对手的名字,在我的宗教中是一个禁忌词。我可以配置npm使用不同的文件夹吗?: -)
对于OSX,你可以去你用户的$HOME(可能是/Users/yourname/),如果它不存在,创建一个.npmrc文件(npm用于用户配置的文件),并为你的npm包创建一个安装目录(例如/Users/yourname/npm)。在.npmrc文件中,设置“prefix”为你的新npm目录,这将是“全局”安装的npm包将被安装的地方;显然,这些“全局”包只对您的用户帐户可用。
在.npmrc:
家prefix = $ {} / npm
然后在命令行执行如下命令:
npm是l
它应该给出你自己的本地配置和全局npm配置的输出,你应该看到你的本地前缀配置被反映出来,可能在输出列表的顶部附近。
为了安全起见,我推荐这种方法来配置你的用户帐户的npm行为,而不是删除你的/usr/local文件夹,这是我在其他地方看到的建议。
如果你想在配置中这样做,你可以这样设置npm配置:
npm config set prefix "$(pwd)/vendor/node_modules"
or
npm config set prefix "$HOME/vendor/node_modules"
使用
npm是l
或者像@pje说的那样,使用——prefix标志
以Windows 7为例,可以使用以下命令/操作集。
创建一个个人环境变量,必须使用双反斜杠:
变量名:%NPM_HOME% 变量值:C:\\SomeFolder\\SubFolder\\
现在,将配置值设置为新文件夹(示例文件名):
设置npm文件夹
npm配置前缀%NPM_HOME%\\npm
设置npm-cache文件夹
npm设置缓存%NPM_HOME%\\npm-cache
设置npm临时文件夹
npm设置“%NPM_HOME%\\temp”
您还可以在更改配置之前清除原始文件夹中的内容。
删除npm-cache npm cache clear 列出npm模块npm -g ls 删除npm模块 NPM -g rm name_of_package1 name_of_package2