如何防止为Node.js(package.json)安装“ devDependencies” NPM模块?

我的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版本。

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

npm install

我觉得这个命令安装了devDependencies

npm install --dev

我如何做到npm install只安装dependencies(这样生产环境只获取那些模块),而同时npm install --dev安装dependenciesdevDependencies呢?

梅A飞云2020/03/16 14:38:40

现在,如果您的package-lock.json和npm 5+一起出现了问题。您必须先删除它,然后才能使用npm install --production

TomStafan2020/03/16 14:38:40
npm install --dev will install dev dependencies

并且,根据仅安装依赖项的问题,以下命令将有所帮助

npm install --prod will install dependencies
Eva阳光2020/03/16 14:38:40

需要添加到选择的答案:到目前为止,npm install在软件包目录中(包含package.json)将安装devDependencies,而npm install -g不会安装它们。

蛋蛋伽罗猿2020/03/16 14:38:40

npm install --production是安装生产所需的节点模块的正确方法。查看文档以获取更多详细信息

番长逆天2020/03/16 14:38:40

使用npm install packageName --save这将增加包的依赖关系,如果你用npm install packageName --save-dev那么它devDependencies

npm install packageName --save-dev应该用于添加软件包以用于开发目的。就像添加TDD包(Chai,mocha等)一样。用于开发而不用于生产。

神乐神无2020/03/16 14:38:40

值得一提的是,您可以使用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以在“生产”模式下运行。

    1. 在运行不带任何参数的本地npm install时,不会在最高级别安装devDependencies。
    2. 为生命周期脚本设置NODE_ENV =“ production”。

快乐的集装箱化=)

LJinJin2020/03/16 14:38:40

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

阿飞LSam2020/03/16 14:38:40

如果您已经安装了所有依赖项,并且希望避免再次从NPM下载生产软件包,则只​​需键入:

npm prune --production

这将从您的node_modules文件夹中删除您的开发依赖项,这在您尝试自动执行两步过程(例如,

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

npm prune在两者之间运行将使您不必重新安装所有内容!

村村凯2020/03/16 14:38:40

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

依赖项/ devDependencies / optionalDependencies之间的区别的目的是代码的使用者可以使用npm来安装这些资源。

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

如果有人计划在其程序中下载和使用您的模块,那么他们可能不希望或不需要下载并构建您使用的外部测试或文档框架。

在这种情况下,最好在devDependencies哈希中列出这些其他项。

只要设置了--dev配置标志,这些东西就会被安装。当执行npm link或从软件包的根目录进行npm install时,此标志会自动设置,并且可以像其他npm配置参数一样进行管理。有关该主题的更多信息,请参见config(1)。

但是,要解决此问题,如果只想使用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 install --production

Jim老丝猪猪2020/03/16 14:38:40

我也遇到了这个问题!npm install有点令人困惑,Web帖子不断引入-d /-dev标志,就好像有一个明确的“开发”安装模式一样。

  • npm install将同时安装“ dependencies ”和“ devDependencies

  • npm install --production将只安装“ 依赖项

  • npm install --dev将只安装“ devDependencies

斯丁小宇宙猿2020/03/16 14:38:40

新选项是:

npm install --only=prod

如果您只想安装devDependencies:

npm install --only=dev
西门神奇2020/03/16 14:38:40

当在开发环境(默认)中的软件包目录中运行时,npm install命令将与devDependencies其他命令一起安装dependencies

使用npm install --only=prod(或--only=production 安装dependencies,而不devDependencies,考虑NODE_ENV环境变量的值

资料来源:npm docs

注意:在npm(2015-08-13)v3.3.0之前,该选项称为--production,即npm install --production

古一斯丁2020/03/16 14:38:40

如果您在2016年阅读了此POST,请通过使用实现您想要的

--only={prod[uction]|dev[elopment]} 

参数将导致仅安装devDependencies或仅安装非devDependencies,而与NODE_ENV无关。

来自:https : //docs.npmjs.com/cli/install