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
选项已弃用,您可以使用更适合您的omit
或include
。【参考方案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_modules
和package-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 install
或npm 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 的区别