我的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?


当前回答

当从包内部安装时,npm将安装dev依赖项(如果当前目录中有package.json)。如果它来自另一个位置(npm注册表、git repo、文件系统上的不同位置),它只安装依赖项。

其他回答

当使用“npm install”时,无论模块是“devDependencies”还是“dependency”,都会在整个应用程序中加载并可用。这个想法的总和:package.json定义为依赖项(任何类型)的所有内容都会安装到node_modules中。

依赖关系/devDependencies/optionalDependencies之间的区别在于代码的使用者可以使用/npm来安装这些资源。

根据文件:https://npmjs.org/doc/json.html...

如果有人计划下载并使用您的模块程序,那么他们可能不想或不需要下载和构建您使用的外部测试或文档框架。在这种情况下,最好在devDependencies哈希。每当--dev配置标志设置。当执行npm链接或当从包的根目录执行npm安装,并可以像这样进行管理任何其他npm配置参数。有关话题

但是,为了解决这个问题,如果您只想使用npm安装“依赖项”,请使用以下命令:

npm install --production

这可以通过查看添加了这个过滤器的Git提交(以及一些其他过滤器[下面列出]来提供这个功能)来确认。

npm可使用的替代过滤器:

--save          => updates dependencies entries in the {{{json}}} file
--force         => force fetching remote entries if they exist on disk 
--force-latest  => force latest version on conflict
--production    => do NOT install project devDependencies
--no-color      => do not print colors

@dmarr尝试使用npm安装--生产

我发现,当尝试为包含节点插件的包安装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之前,必须删除它。

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

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

如果您已经安装了所有依赖项,并且希望避免再次从NPM下载生产包,您可以简单地键入:

npm prune --production

这将从node_modules文件夹中删除您的开发依赖项,如果您尝试自动化两步过程,这将非常有用,如

使用开发依赖项对我的项目进行Webpack仅使用生产模块构建Docker映像

在两者之间运行npm-prune将使您不必重新安装任何东西!