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

如何防止安装;devDependencies“;Node.js(package.json)的NPM模块?,node.js,npm,Node.js,Npm,我的package.json文件中有这个(缩写版本): 我正在Mac 10.6.8上使用NPM版本1.1.1 当我从项目根目录运行以下命令时,它将同时安装依赖项和devdependency: npm install npm install --dev 我觉得这个命令安装了devDependencies: npm install npm install --dev 如何使npm安装只安装依赖项(因此生产环境只获取这些模块),而类似于npm install--dev的东西会同时安装依赖项和d

我的package.json文件中有这个(缩写版本):

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

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

npm install
npm install --dev
我觉得这个命令安装了
devDependencies

npm install
npm install --dev

如何使npm安装只安装依赖项(因此生产环境只获取这些模块),而类似于
npm install--dev
的东西会同时安装
依赖项
devdependentials

npm install
命令会在开发环境(默认)的包目录中运行时安装
devdependentials

使用
npm install--only=prod
(或
--only=production
)仅安装依赖项,而不安装
devdependency,
,无论
节点环境变量的值如何

资料来源:


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

我也遇到了这个问题!npm安装有点混乱,web帖子不断引入-d/--dev标志,好像有一个显式的“开发”安装模式

  • npm安装
    将同时安装“依赖项”和“开发依赖项”

  • npm安装--生产将只安装“依赖项”

  • npm安装--dev
    将只安装“devdependences”


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

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

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

依赖项/devdependency/optionalDependencies之间的区别在于代码的使用者可以通过npm来安装这些资源

根据文件:

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

在这种情况下,最好在列表中列出这些附加项 devdependency散列

只要--dev配置标志 设置。此标志在执行npm链接或 从包的根目录进行npm安装,可以像 任何其他npm配置参数。有关详细信息,请参阅配置(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 try using npm install--production

我发现,当尝试为包含节点加载项的包安装开发依赖项时,在运行npm install--dev时无法避免构建加载项,即使您只想安装devdependency。因此,我不得不绕开npm:

node -e 'console.log( Object.keys( require( "./package.json" ).devDependencies ) );' | \
sed  -e "s/^[^']*'//" -e "s/'.*$//" | \
xargs npm install
或者,更好(更简洁)的是

新的选择是:

npm install --only=prod
如果只想安装devdependency:

npm install --only=dev

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

npm prune --production
这将从
node\u modules
文件夹中删除您的开发依赖项,如果您试图自动化一个两步流程,如

  • 使用开发人员依赖项对我的项目进行网页打包
  • 仅使用生产模块构建Docker映像

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

    如果您在2016年阅读了这篇文章,请使用

    --only={prod[uction]|dev[elopment]} 
    
    参数将导致仅安装devdependency或仅安装非devdependency,而不考虑节点的环境


    from:

    使用
    npm install packageName--save
    这将在依赖项中添加程序包,如果使用
    npm install packageName--save dev
    则它将开发依赖项


    npm install packageName--save dev
    应用于添加用于开发目的的包。例如添加TDD包(Chai、mocha等)。在开发中使用,而不是在生产中使用。

    值得一提的是,您可以使用
    NODE\u ENV
    环境变量来实现相同的结果。如果您将节点应用程序(例如Docker)进行容器化,这一点尤其有用

    NODE\u ENV=生产npm安装
    
    上述代码将安装除dev依赖项之外的所有依赖项(即
    devdependency

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

    环境变量很容易在需要时覆盖(例如,如果您想在Travis CI上运行测试套件)