首页 文章

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

提问于
浏览
479

我在我的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 .

当我从项目根目录运行以下命令时,它会安装 dependenciesdevDependencies

npm install

我的印象是这个命令安装了 devDependencies

npm install --dev

我怎么做到 npm install 只安装 dependencies (所以 生产环境 环境只获得那些模块),而像 npm install --dev 这样安装 dependenciesdevDependencies

13 回答

  • 15

    现在有一个问题,如果你有一个npm 5的package-lock.json . 您必须在使用 npm install --production 之前将其删除 .

  • 40

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

    npm prune --production
    

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

    • 使用dev依赖项Webpack我的项目

    • 仅使用 生产环境 模块构建Docker镜像

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

  • 114

    需要添加到所选答案:截至目前,包目录(包含 package.json )中的 npm install 将安装devDependencies,而 npm install -g 将不会安装它们 .

  • 2

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

    • npm install 将同时安装“依赖项" and " devDependencies”

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

    • npm install --dev 只会安装“devDependencies”

  • 668

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

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

    无论NODE_ENV如何,参数都将导致仅安装devDependencies或仅安装非devDependencies .

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

  • 18

    npm install 命令将在开发环境(默认)中的包目录内运行时沿其他 dependencies 安装 devDependencies .

    无论 NODE_ENV 环境变量的值如何,都使用 npm install --only=prod (或 --only=production )来安装 only dependencies ,而不是 devDependencies, .

    资料来源:npm docs

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

  • 1

    使用 npm install packageName --save 这将在 dependencies 中添加包,如果你使用 npm install packageName --save-dev 那么它 devDependencies .

    npm install packageName --save-dev 应该用于添加包以用于开发目的 . 就像添加TDD包(Chai,mocha等)一样 . 哪些用于开发而非 生产环境 .

  • 17

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

  • 2

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

    NODE_ENV=production npm install
    

    上面的代码将安装所有依赖项,但是安装dev(即 devDependencies ) .

    如果你需要在 Dockerfile 中使用环境变量,可以找到更多信息here .

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

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

    NPM Documentation here

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

    快乐的集装箱化 =)

  • 201

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

    依赖项/ devDependencies / optionalDependencies之间差异的目的是代码的使用者可以使用n / n来安装这些资源 .

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

    如果有人计划在他们的程序中下载和使用您的模块,那么他们可能不希望或不需要下载和构建您使用的外部测试或文档框架 . 在这种情况下,最好在devDependencies哈希中列出这些附加项 . 只要设置了--dev配置标志,就会安装这些东西 . 在执行npm链接或从包的根目录执行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

  • 2

    我发现,当尝试为包含节点插件的软件包安装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
    
  • 0

    新选项是:

    npm install --only=prod
    

    如果只想安装devDependencies:

    npm install --only=dev
    
  • 0

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

相关问题