npm安装无法安装devDependencies

374

在Windows上,当我运行npm install时,它不会安装devDependencies。据我所知,它应该安装。如果我运行npm install --dev,则会安装devDependencies。我不明白为什么npm install不会安装devDependencies,而只安装依赖项。可能的原因是什么?如何解决?

也许我的package.json有问题?如果有帮助,下面列出了它:

{
  "name": "try-brunch",
  "version": "0.1.0",
  "private": "true",
  "devDependencies": {
    "brunch": "^2.0.4",
    "cssnano-brunch": "^1.1.5",
    "javascript-brunch": "^1.8.0",
    "sass-brunch": "^1.9.2",
    "uglify-js-brunch": "^1.7.8"
  },
  "dependencies": {
    "jquery": "^2.1.4"
  }
}

4
当你编写软件包(应用程序)时需要安装devDependencies,但使用该软件包并不需要devDependencies。因此,要求使用额外的标志安装devDependencies是合理的。如果npm install默认安装devDependencies,那么用户也会得到冗余的软件包。 - Константин Ван
5
文档记录的行为是,当我在我的文件夹中运行npm i时,它会获取我的 package.json 文件并安装依赖项和开发依赖项。这就是预期的工作方式,这很有道理(例如,在 git clone 后运行 npm i 时,我期望拥有所有需要的东西,包括例如 webpack 插件)。这个问题涉及一个错误,即实际行为与预期不同。请查看文档-https://docs.npmjs.com/cli/install。有一个标志可以选择不安装开发依赖项,但默认行为是安装它们,这非常合理,并且是每个人都预期的。 - tristantzara
1
我不认为有任何明智的理由让我记得运行另一个命令来安装例如webpack插件、typescript类型定义或任何其他开发依赖项,每次拉取时都要这样做。npm i应该同时引导两者,这是预期的、合理的和记录在案的行为,所以我真的不明白为什么你说这个问题应该成为标准。 - tristantzara
1
关于您提到的“使用它不需要devDependencies”的观点,我有点困惑。当我在CI或服务器上运行npm i时,我的应用程序需要例如typescript、jest、webpack等devdeps来进行构建,所以我不知道这个“使用”是指什么。 - tristantzara
1
对于我误读问题并冒犯您,我感到非常抱歉。这是我错误理解了您的语境所致。 - Константин Ван
显示剩余5条评论
13个回答

422

查看NPM文档中的install了解更多信息。

使用--production标志(或将NODE_ENV环境变量设置为production)时,npm不会安装列在devDependencies中的模块。

--only={prod[uction]|dev[elopment]}参数将导致仅安装devDependencies或仅安装非devDependencies,而不考虑NODE_ENV。

你试过了吗?

npm install --only=dev

如果您担心您的package.json可能不正确,最好的做法是这样。创建一个新文件夹,并运行以下命令:

npm init --yes

然后:

npm install --save-dev brunch@^2.0.4
npm install --save-dev cssnano-brunch@^1.1.5
npm install --save-dev javascript-brunch@^1.8.0
npm install --save-dev sass-brunch@^1.9.2
npm install --save-dev uglify-js-brunch@^1.7.8
npm install jquery@^2.1.4 --save

你应该可以开始了!否则,我会继续发布其他选项。

检查你的npm配置:

npm config list

npm的配置设置来源于命令行、环境变量和npmrc文件。因此,请检查环境变量和npmrc文件。

仍然无法解决?

好吧,创建一个新的文件夹,最好在文件系统中的其他位置。例如,C:\myNewFolder - 距离基础C:驱动器越近越好。

然后运行:

npm init --yes

现在运行:

npm install underscore --save

最后:

npm install mocha --save-dev

一切是否如预期运作?

我试图理解您的问题是全局性的还是与之前的文件夹和依赖项有关的局部性问题。


7
npm install --only=dev 命令只安装开发环境依赖,但我想一次性安装生产环境和开发环境依赖。package.json 文件看起来没问题,因为重新创建它并没有改变任何东西。我想知道 NODE_ENV 在全局作为默认值和在项目中作为一个值时是否都存在?在 Windows 上我应该在哪里查看和更改这些值(我已经查找了系统变量 NODE_ENV 并没有找到)? - tristantzara
@TristanTzara - 我现在几乎完全使用MAC。然而,从过去的记忆中(几年前在NT和XP上),你可以在命令提示符窗口中键入类似于“set”的内容。否则,转到类似于系统属性->高级->环境变量并检查您的条目。您正在寻找一个带有NODE_ENV的“键”。我现在会搜索Windows选项,但发布这篇文章以帮助您。 - arcseldon
点击这里查看如何在Windows 8和Windows 7中查看环境变量的名称和值:http://winaero.com/blog/how-to-see-names-and-values-of-environment-variables-in-windows-8-and-windows-7/ - arcseldon
5
请执行 npm install && npm install --only=dev,谢谢! - prograhammer
5
“only”选项已被弃用,您可以使用“omit”或“include”,根据您的需要选择更适合的选项。请注意,这两个选项并不会改变原意。 - monk
显示剩余4条评论

109

检查 npm config production 的值是否设置为 true。如果该值为 true,则会跳过开发依赖项。

运行 npm config get production

要进行设置:npm config set -g production false


我想知道在npm 5.x和npm 6.x之间,如果没有设置值,是否默认变为true而不是false - James Perih

60

请确保您没有将环境变量NODE_ENV设置为'production'。

如果设置了该变量,则不使用--dev标志将无法安装开发依赖项。


16
请注意,npm install --dev 命令会 递归地 安装 devDependencies。这几乎永远不是您想要的,并且实际上已被弃用 - Wonko
14
--dev 选项的使用已被弃用,请改用 --only=dev。请注意保持原意,使语言简单易懂。 - Sarath Ak
4
npm install --include dev 就可以了 @MaxCoplan - monk
4
npm警告:使用--dev选项已被弃用。请改用--also=dev - Amir Savand
2
--include=dev 可能对某些人很有用。 - Lazerbeak12345
显示剩余4条评论

28

您可以使用以下方法仅安装用于开发的依赖项:

npm i -D <dependencies-names>

4
这并不是原帖所问的内容。 - MuhsinFatih

23

我有一个来自旧版本package.jsonpackage-lock.json文件,我删除了它,然后一切都正确安装了。


16

我也遇到了类似的问题。使用npm install --only=dev命令无法解决,npm rebuild也不行。最终,我不得不删除node_modules文件夹和package-lock.json文件然后再次运行npm install。这对我起到了修复作用。


一样的。我在复制另一个项目并进行一些修改,这就是我要做的事情。 - thinkanotherone

10

目前您可以使用:

npm i --also=dev

1
npm警告:配置也请使用--include=dev。 - gnom1gnom

10

我也遇到了相同的问题,因为我在构建 Docker 时设置了 NODE_ENV=production。后来我加了一个 npm install --only=dev。现在一切正常了,我需要这些 devDependencies 来构建 TypeScript 模块。

RUN npm install
RUN npm install --only=dev

7

请确保您的 package.json 文件是有效的...

我遇到了以下错误...

npm WARN Invalid name: "blah blah blah"

类似地,这个错误导致 devDependencies 没有被安装。

提示一下,将 package.json 文件中的 "name" 改为 blah-blah-blah 可以解决这个问题。


6

因此我解决的方法是在我通常运行 npm installnpm ci 的命令中添加了 NODE_ENV=build,然后在命令之后添加了 NODE_ENV=production,因此我的整个命令如下:

RUN NODE_ENV=build && npm ci && NODE_ENV=production

到目前为止,我没有遇到任何不良反应,我的开发依赖项用于构建应用程序时全部工作/正确加载。

我认为这比添加像 npm install --only=dev 这样的额外命令更好,因为它需要更少的时间,并且使我能够使用 npm ci 命令,该命令速度更快,专门设计用于在CI工具/构建脚本中运行。(详见npm-ci文档了解更多信息)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接