ChatGPT解决这个技术问题 Extra ChatGPT

npm install 不会安装 devDependencies

出于某种原因在 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

C
Community

查看 install 的 NPM 文档

使用 --production 标志(或者当 NODE_ENV 环境变量设置为 production 时),npm 将不会安装 devDependencies 中列出的模块。” --only={prod[uction]|dev[elopment]} 参数将只导致无论 NODE_ENV 为何,要安装 devDependencies 或仅安装非 devDependencies。”

你有没有尝试过

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
S
Shawn Mclean

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

运行 npm config get production

设置它:npm config set -g production false


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

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

如果您这样做,则不会在没有 --dev 标志的情况下安装开发依赖项


请注意,npm install --dev 递归地 安装 devDependencies。这几乎不是您想要的,实际上是 deprecated
不推荐使用 --dev 选项。改用 --only=dev
npm install --include dev 成功了@MaxCoplan
npm WARN install 不推荐使用 --dev 选项。请改用 --also=dev
--include=dev 对于外面的人来说可能是一个有用的标志。
佚名

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


A
Ale

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

npm i -D <dependencies-names>

这根本不是OP所要求的
o
obsessiveprogrammer

我有一个类似的问题。 npm install --only=dev 无效,npm rebuild 也无效。最终,我不得不删除 node_modulespackage-lock.json 并再次运行 npm install。那为我修好了。


相同的。我正在复制另一个项目并进行一些修改,这是我必须做的。
P
Phat Tran

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

RUN npm install
RUN npm install --only=dev

A
Alex Gray

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

我有以下错误...

npm WARN Invalid name: "blah blah blah"

同样,这导致 devDependencies 未安装。

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


J
JakGuru

所以我解决这个问题的方法是在我通常运行 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 文档)


O
Ogglas

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

我的例外:

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


F
Feri Forgacs

就我而言,问题在于我在运行 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


A
AmiNadimi

到目前为止,您可以使用:

npm i --also=dev

J
Jack

正如@Ale 所说,我们可以现在使用 npm i -D <some_module_name>npm i --save-dev <some_module_name>。似乎命令在节点版本的某个点发生了更改。官方 (npm dependencies and devDependencies) 说如下。

当您添加 -D 标志或 --save-dev 时,您将其安装为开发依赖项,这会将其添加到 devDependencies 列表中。