如何使用npm仅安装"devDependencies"?

169

我试图安装 package.json 文件中列出的 "devDependencies",但以下命令都不像我期望的那样工作。所有以下命令都会安装我不想要的生产依赖项。

npm install --dev
npm install --only=dev
npm install --only-dev

我想不出任何告诉npm只安装devDependencies的方法了。:(


1
今天 - npm警告安装使用“--dev”选项已被弃用。请改用“--only = dev”。 - Andriy Leshchuk
2
最新版本的NPM(v7)支持--production=false而不是上面的方式。 - devspeter
2
--production=false 不能解决 OP 的问题:它会安装 dependencies 和 devDependencies,而不仅仅是 devDependencies。 - Michael K
7个回答

199

查看NPM的安装文档

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

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

你试过以下方法吗?

npm install --only=dev

12
刚刚我发现我的 npm 版本是 2.x。我通过运行命令 npm install npm -g 进行了升级,使用 --only=dev 选项非常顺利。感谢您的回复。 - Nesan Rajendran
1
@NesanJoseph提到的版本问题也是我的情况。在旧版的npm中,npm install --prod会从dependencies文件夹安装项目。而npm installnpm install --dev则会同时从dependenciesdevDependencies文件夹安装! - Shiyaz
2
对我不起作用(node v12.19.0,npm v6.14.8)。也许与自2016年4月以来开放的此问题有关:https://github.com/npm/npm/issues/12184 - Fappaz
20
值得注意的是,“--only=dev”已被弃用并将不再起作用。我认为目前没有一种方法仅安装开发依赖项。 - Michael Murphy
2
@MichaelMurphy 给他点赞!在 npm 8 之后,没有办法仅安装 devDependencies。 - julio
显示剩余2条评论

77
npm i -D

一个可选的简短版本。


6
是的,我已经运行了 npm install -D 命令并且它成功了。所以我感到很惊讶并在谷歌上搜索了一下,看到了你的回答 :) - its4zahoor
1
命令“npm install -D”对我无效,node_modules的大小与运行“npm i”时相同。 - Cristian Contreras
1
我不确定 npm i -D 是否符合您的预期。文档中没有任何相关参考。我猜测 -D 标志被忽略了,这里执行的是普通的 npm i。请参考 https://docs.npmjs.com/cli/v8/commands/npm-install。 - Michael Murphy
从npm 9开始,这似乎不再是可选的。现在似乎只有-D唯一的方式。 - undefined

42
npm install thePackageName --save-dev

对我来说这很好用。


7
--save-dev 会将包保存到 package.json 文件的 devDependencies 中。 - Rashomon
2
--save-dev 的作用是标记所安装的软件包将会被安装在 devDependencies 下。 - Daniel Dror
3
更像是 npm install thePackageName --save-dev - Deke
5
这将安装一个指定名称的单个软件包,并将其保存到开发依赖项中。问题是如何仅从package.json中安装devDependencies。 - Lalnuntluanga Chhakchhuak
5
不符合问题的标准。你需要安装:1.一个单独的软件包 2.问题要求如何安装已经在package.json中但仅存在于依赖列表中的东西。 - Urasquirrel
显示剩余5条评论

21

从npm版本7.10.0开始,你可以省略某些类型的依赖项,但是你不能再省略"the"依赖项(生产环境)。因此,这个问题已经没有解决方案了。


5
我想知道为什么那条线是随意划定的。由于现在的容器技术,依赖关系很笨重,通常来说,在开发时安装所有依赖项是没有必要的。 - Willem Ellis

10

--only=dev 选项已经不再受支持。要安装开发依赖项,请运行 npm install --production=false


7
正确翻译:--only=dev 选项已被移除。 不正确的翻译:--production=false 不是安装仅 devDependencies(不安装 dependencies)的替代方法。 - Michael K
2
npm install --production=false 将安装所有依赖项,包括正常和开发环境,因为这是在非生产环境(即开发环境)中所需的。 - Michael Murphy

5

在最新版本的npm中,没有办法仅安装开发依赖项。但是有一个解决方法可以实现。

您可以创建另一个package_dev.json文件,在其中只放置devDependencies并保持dependencies为空。

然后,要仅安装开发依赖项,可以执行下面的脚本。

cp package.json temp.json && \
cp package_dev.json package.json && \
npm install && \
rm -rf package.json && \
cp temp.json package.json && \
rm -rf temp.json

我有类似的需求,需要创建一个GitHub操作并仅安装开发依赖项。上述解决方法对我非常有用。

这种方法的唯一缺点是,每当package.json文件更新时,您需要注意更新package_dev.json。


这应该是今天的答案。 - julio

3

运行npm install,它将安装所有位于devDependenciesdependencies下的依赖项。

要安装并将软件包保存为开发依赖项,可以在命令后添加选项-D,例如npm install package_name --save-dev

要安装所有位于devDependencies下的软件包,可以使用命令npm install --only=dev

要安装并将软件包保存为生产环境或者普通依赖项,可以在命令后添加选项-P,例如npm install package_name --save-prod 或者 npm install package_name

要安装所有位于dependenciesProd dependencies下的软件包,请设置环境变量NODE_ENV=production,或者在命令中添加该选项,例如NODE_ENV=production npm installnpm install --only=prod

除了使用完整命令npm install之外,还可以使用缩写命令i,例如npm i

参考资料


这并没有回答OP的问题:“仅安装在我的package.json文件中列出的“devDependencies”。” - Michael K

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