我的package.json文件(简称)中有这个:

{
  "name": "a-module",
  "version": "0.0.1",
  "dependencies": {
    "coffee-script":      ">= 1.1.3"
  },
  "devDependencies": {
    "stylus":             ">= 0.17.0"
  }
}

我正在Mac 10.6.8上使用NPM 1.1.1版。

当我从项目根目录运行以下命令时,它将同时安装依赖项和devDependencies:

npm install

我觉得这个命令安装了devDependencies:

npm install --dev

如何使npm install只安装依赖项(所以生产环境只安装这些模块),而像npm install-dev这样的东西同时安装依赖项和devDependencies?


当前回答

我发现,当尝试为包含节点插件的包安装dev依赖项时,即使只想安装devDependencies,也无法避免在运行npm install--dev时构建插件。所以,我不得不绕到npm的后面:

node -e 'console.log( Object.keys( require( "./package.json" ).devDependencies ) );' | \
sed  -e "s/^[^']*'//" -e "s/'.*$//" | \
xargs npm install

或者,更好地(更简洁地),

node -e 'Object.keys( require( "./package.json" ).devDependencies )
.map( function( item ){ console.log( item ) } );' | xargs npm install

其他回答

npm安装--生产--无可选

它只安装依赖项的dep,并将忽略optionalDependencies和devDependencie

使用npm install packageName--save这将在依赖项中添加包,如果使用npm安装packageName--save dev then it devDependencies。

npm install packageName——save-dev应用于添加用于开发目的的包。比如添加TDD包(Chai、摩卡等)。用于开发而非生产。

我发现,当尝试为包含节点插件的包安装dev依赖项时,即使只想安装devDependencies,也无法避免在运行npm install--dev时构建插件。所以,我不得不绕到npm的后面:

node -e 'console.log( Object.keys( require( "./package.json" ).devDependencies ) );' | \
sed  -e "s/^[^']*'//" -e "s/'.*$//" | \
xargs npm install

或者,更好地(更简洁地),

node -e 'Object.keys( require( "./package.json" ).devDependencies )
.map( function( item ){ console.log( item ) } );' | xargs npm install

现在有一个问题,如果你有npm5+的package-lock.json。在使用npm install--production之前,必须删除它。

值得一提的是,您可以使用NODE_ENV环境变量来实现相同的结果。如果您正在容器化Node应用程序(例如Docker),则特别有用。

NODE_ENV=production npm install

上面的代码将安装除dev依赖项之外的所有依赖项(即devDependencies)。

如果您需要在Dockerfile中使用环境变量,可以在这里找到更多信息。

环境变量很容易在需要时覆盖(例如,如果您想在Travis CI上运行测试套件)。如果是这样的话,你可以这样做:

docker run -v $(pwd):/usr/src/app --rm -it -e NODE_ENV=production node:8 npm install

此处为NPM文档

生产默认值:false类型:布尔设置为true以“生产”模式运行。在没有任何参数的情况下运行本地npm安装时,devDependencies不会安装在最顶层。为生命周期脚本设置NODE_ENV=“production”。

快乐的集装箱化=)