npm-config

描述

npm会从以下来源获取配置值,按优先级排序为:

命令行标记

命令行里的--foo bar会将foo配置参数的值设置为bar--告诉cli解析器停止读取标记。使用--flag且不带任何指定的值将设置flag配置参数的值为true

比如,--flag1 --flag2会将flag1flag2配置参数的值都设置为true,而--flag1 --flag2 bar会将flag1设置为trueflag2设置为bar。最后,--flag1 --flag2 -- bar将设置flag1flag2true,且bar将作为命令参数。

环境变量

任何以npm_config_开始的环境变量都将被理解为配置参数。比如,将npm_config_foo=bar放入你的环境里,这将设置foo配置参数的值为bar。任何没有给定一个值的环境变量都将被设置为true。配置的值都是不区分大小写的,因此NPM_CONFIG_FOO=bar将起同样的作用。但是需要注意,在npm-scripts里,npm将设置它自己的环境变量,并且比起你设置的大写版本的,Node 更喜欢这些小写版本的,详情请见这个 issueopen in new window

注意,你需要使用下划线_而不是横线-,因此--allow-same-version将变成npm_config_allow_same_version=true

npmrc 文件

有四个相关的文件:

  • 每个项目的配置文件(/path/to/my/project/.npmrc
  • 每个用户的配置文件(默认是$HOME/.npmrc;可通过 CLI 选项--userconfig或环境变量$NPM_CONFIG_USERCONFIG配置)
  • 全局的配置文件(默认是$PREFIX/etc/npmrc;可通过 CLI 选项--globalconfig或环境变量$NPM_CONFIG_GLOBALCONFIG配置)
  • npm内置的配置文件(/path/to/npm/npmrc

更多详情可见npmrc

默认配置

运行npm config ls -l可看到npm内部的配置参数集合,这些都是默认值如果没有特殊设置的话。

简写以及一些其他的 CLI 细节

以下这些简写会在命令行解析:

  • -v: --version
  • -h, -?, --help, -H: --usage
  • -s, --silent: --loglevel silent
  • -q, --quiet: --loglevel warn
  • -d: --loglevel info
  • -dd, --verbose: --loglevel verbose
  • -ddd: --loglevel silly
  • -g: --global
  • -C: --prefix
  • -l: --long
  • -m: --message
  • -p, --porcelain: --parseable
  • -reg: --registry
  • -f: --force
  • -desc: --description
  • -S: --save
  • -P: --save-prod
  • -D: --save-dev
  • -O: --save-optional
  • -B: --save-bundle
  • -E: --save-exact
  • -y: --yes
  • -n: --yes false
  • ll and la commands: ls --long

若是指定的配置参数可以明确地解析到一个已知的配置参数,则它将扩展为那个配置参数。比如:

npm ls --par
# same as:
npm ls --parseable
1
2
3

若是多个单字符简写连在一起,且连起来的结果组合明确不是其他的配置参数,则它将扩展为它的各个组成片段。比如:

npm ls -gpld
# same as:
npm ls --global --parseable --long --loglevel info
1
2
3

每个包的配置设置

当运行脚本时(详见npm-scriptsopen in new window),package.json文件里的config属性将被环境里的<name>[@<version>]:<key>形式的配置参数覆盖。比如,package.json是这样:

{
    "name" : "foo",
    "config": {
        "port" : "8080"
    },
    "scripts": {
        "start" : "node server.js"
    }
}
1
2
3
4
5
6
7
8
9

server.js是这样:

http.createServer(...).listen(process.env.npm_package_config_port)
1

则用户可通过以下方式改变之前设置的行为:

npm config set foo:port 80
1

更多信息可见package.jsonopen in new window

各项配置

各个配置项,详情Config Settingsopen in new window