npm install 不会安装 devDependencies

Posted

技术标签:

【中文标题】npm install 不会安装 devDependencies【英文标题】:npm install won't install devDependencies 【发布时间】:2016-04-14 12:38:39 【问题描述】:

由于某种原因在 Windows 上运行 npm install 时它不会安装 devDependencies。 AFAIK 它应该。如果我运行 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"
  

【问题讨论】:

为什么我们甚至需要一个 fix 呢?应该是默认的! devDependencies 实际上是模块开发人员的依赖项。我打赌我们大多数人npm install 一个模块会使用它,而不是开发它。 我的意思是,devDependencies 的安装只有在您编写包(应用程序)时才需要。使用它不需要devDependencies。所以devDependencies 需要安装额外的标志是合理的。 如果npm install 安装了devDependencies 默认情况下用户也会得到多余的包。 记录的行为是,当我在我的文件夹中执行 npm i 时,它会抓取 py package.json 并安装 deps 和 devdeps。这是它的工作方式,它是有意义的(例如,当我在 git clone 之后执行 npm i 时,我希望拥有我需要的一切,包括例如 webpack 插件)。当实际行为与预期不同时,此问题解决了一个错误。请看一下文档-docs.npmjs.com/cli/install。有一个不安装 devdeps 的标志,但默认行为是安装它们,这非常有意义,并且是每个人都期望的 我没有看到任何理智的理由让我记得运行另一个命令来安装,例如webpack 插件或 typescript 类型 defs 或任何其他 devdeps 每次我拉。 npm i 应该引导两者,这是预期的、理智的和记录在案的行为,所以我真的不明白你为什么说这个问题应该是一个标准 关于你的观点Using it does not require the devDependencies - 我有点困惑。当我在 CI 或服务器上运行 npm i 时,我的应用程序需要例如typescript、jest、webpack,无论要构建什么 devdeps,所以我不知道这是关于哪个using 【参考方案1】:

确保您没有将环境变量 NODE_ENV 设置为“生产”。

如果这样做,没有--dev 标志将不会安装开发依赖项

【讨论】:

我查看了我的系统变量,但我什至没有这个。也许我看错地方了? 请注意,npm install --dev递归地安装 devDependencies。这几乎不是你想要的,实际上是deprecated。 不推荐使用--dev 选项。请改用--only=dev npm install --include dev 成功了@MaxCoplan npm WARN install 不推荐使用--dev 选项。请改用--also=dev【参考方案2】:

查看 NPM 文档以获取 install

使用 --production 标志(或者当 NODE_ENV 环境变量设置为生产时),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 文件。

仍然失败?

好的,创建一个新文件夹,最好是在文件系统的其他位置。 IE。不在同一文件夹层次结构中。例如,C:\myNewFolder - 越靠近基本 C: 驱动器越好。

然后运行:

npm init --yes

现在运行:

npm install underscore --save

最后:

npm install mocha --save-dev

一切都按预期工作吗?

我要做的是了解您的问题是全局性的,还是上一个文件夹和依赖项的本地问题。

【讨论】:

特里斯坦 - 这对你的情况有帮助吗?请您将答案标记为正确,或者让我知道尝试上述方法的结果? npm install --only=dev 安装 devdeps,但我想同时安装 deps 和 devdeps。 package.json 似乎没问题,因为重新创建它不会改变任何东西。 NODE_ENV 作为默认值在全局和本地作为项目值都存在,我对吗?我在哪里可以检查和更改 windows 上的这些值(我已经查看了,我没有系统变量 NODE_ENV) @TristanTzara - 这些天我几乎只在 MAC 上工作。但是,从过去的记忆中(几年前在 NT 和 XP 上) - 您可以在命令提示符窗口中键入“set”之类的内容吗?或者转到系统属性 -> 高级 -> 环境变量之类的内容并在那里检查您的条目.您正在寻找带有 NODE_ENV 的“钥匙”。我现在会在谷歌上搜索一个 Windows 选项,但如果有帮助,我会发布这个。 npm install && npm install --only=dev 谢谢! 另外only 选项已弃用,您可以使用更适合您的omitinclude【参考方案3】:

检查 npm config 生产值是否设置为 true。如果此值为 true,它将跳过 dev 依赖项。

运行npm config get production

设置它:npm config set -g production false

【讨论】:

我想知道,在 npm 5.x 和 npm 6.x 之间的某个地方,如果没有设置值,默认值是否变为 true 而不是 false【参考方案4】:

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

【讨论】:

【参考方案5】:

您可以使用安装依赖的简写方式仅用于开发,如下所示:

npm i -D <dependencies-names>

【讨论】:

最佳答案。应该在顶部【参考方案6】:

确保您的package.json 有效...

我遇到了以下错误...

npm WARN Invalid name: "blah blah blah"

同样,导致devDependencies 无法安装。

仅供参考,将package.json“名称”更改为blah-blah-blah 已修复。

【讨论】:

【参考方案7】:

我遇到了类似的问题。 npm install --only=dev 无效,npm rebuild 也无效。最终,我不得不删除node_modulespackage-lock.json 并再次运行npm install。这为我解决了问题。

【讨论】:

【参考方案8】:

我有同样的问题,因为我在构建 Docker 时设置了NODE_ENV=production。然后我再添加一个npm install --only=dev。一切正常。我需要 devDependencies 来构建 TypeSciprt 模块

RUN npm install
RUN npm install --only=dev

【讨论】:

【参考方案9】:

所以我解决这个问题的方法是在我通常运行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 工具中运行 /构建脚本。 (有关更多信息,请参阅npi-ci 文档)

【讨论】:

【参考方案10】:

运行npm-check-updates -u 后出现类似错误。通过删除node_modules 文件夹和package-lock.json 解决了这个问题。之后,一个新的npm install 一切正常。

我的例外:

未能加载在中声明的解析器“@typescript-eslint/parser” 'package.json » eslint-config-react-app#overrides[0]':找不到 模块'@typescript-eslint/parser'

【讨论】:

【参考方案11】:

就我而言,问题在于我在运行npm install 的同一终端会话中将NODE_ENV 变量设置为生产。

为了让我的构建能够正常运行,我不允许更改 NODE_ENV 的值,所以我通过向它添加 --production=false 标志来强制 npm 安装所有依赖项:npm install --production=false as mentioned in the docs。

如果您不需要将NODE_ENV 设置为production,您只需在终端输入export NODE_ENV=development 以覆盖其值并再次运行npm install

【讨论】:

以上是关于npm install 不会安装 devDependencies的主要内容,如果未能解决你的问题,请参考以下文章

npm installnpm install --save与npm install -dev区别

npm install --save 与 npm install --save-dev 的区别

npm install --save 与 npm install --save-dev 的区别

npm install --save 与 npm install --save-dev 的区别

npm i与npm install的区别

node升级后npm install不能安装新版本