我的 package.json 文件中有这个(缩短版):
{
"name": "a-module",
"version": "0.0.1",
"dependencies": {
"coffee-script": ">= 1.1.3"
},
"devDependencies": {
"stylus": ">= 0.17.0"
}
}
我在 Mac 10.6.8 上使用 NPM 版本 1.1.1。
当我从项目根目录运行以下命令时,它会同时安装 dependencies
和 devDependencies
:
npm install
我的印象是这个命令安装了 devDependencies
:
npm install --dev
如何使 npm install
只安装 dependencies
(所以生产环境只获取那些模块),而像 npm install --dev
这样的东西同时安装 dependencies
和 devDependencies
?
npm install
命令将在开发环境(默认)中的软件包目录内运行时将 devDependencies
与其他 dependencies
一起安装。
在 8.x 及更高版本中,使用 --omit=dev
标志仅安装常规依赖项:
npm install --omit=dev
这将仅安装 dependencies
,而不是 devDependencies
,无论 NODE_ENV
环境变量的值如何。
如果您使用 6.x 或更早版本,则需要改用 --only=prod
标志。
注意:
在npm(2015-08-13)的v3.3.0之前,该选项被称为--production
,即
npm install --production
您可能还需要 --no-optional
标志。
我也遇到了这个问题! npm install 有点令人困惑,网络帖子不断引入 -d/--dev 标志,就好像有一个明确的“开发”安装模式。
npm install 将安装“依赖项”和“devDependencies”
npm install --production 只会安装“依赖项”
npm install --dev 只会安装“devDependencies”
NODE_ENV
设置为 production
并且您运行 npm install
,它将不会安装开发依赖项。我在 Dockerfile 中遇到了这个问题。
npm --production=false install
来解决(虽然不确定这是否可以与 --dev 标志一起使用)
echo $NODE_ENV
返回空怎么办?
npm install --dev
?意思是在什么情况下?例如,他们已经由 npm install --production
安装,现在决定做一些测试?
新选项是:
npm install --only=prod
如果您只想安装 devDependencies:
npm install --only=dev
--only=prod
的部分之前,我留下了该评论。先生,您部分正确。 ;P
如果您已经安装了所有依赖项,并且希望避免再次从 NPM 下载生产包,您只需键入:
npm prune --production
这将从您的 node_modules
文件夹中删除您的开发依赖项,如果您尝试自动执行两步流程,例如
Webpack 我的项目,使用开发依赖项 仅使用生产模块构建 Docker 映像
在两者之间运行 npm prune
将使您不必重新安装所有内容!
npm install --only=production
即使你安装了整个东西并且它达到了相同的结果
如果您在 2016 年阅读此 POST,请通过使用实现您想要的
--only={prod[uction]|dev[elopment]}
无论 NODE_ENV 如何,参数都将导致仅安装 devDependencies 或仅安装非 devDependencies。
来自:https://docs.npmjs.com/cli/install
使用“npm install”时,无论它们是“devDependencies”还是“dependencies”,模块都会在整个应用程序中加载并可用。这个想法的总和:你的 package.json 定义为依赖项(任何类型)的所有内容都安装到 node_modules。
依赖项/devDependencies/optionalDependencies 之间差异的目的是代码的使用者可以使用 npm 执行哪些操作来安装这些资源。
根据文档:https://npmjs.org/doc/json.html...
如果有人计划在他们的程序中下载和使用您的模块,那么他们可能不想或不需要下载和构建您使用的外部测试或文档框架。在这种情况下,最好在 devDependencies 哈希中列出这些附加项。只要设置了 --dev 配置标志,就会安装这些东西。此标志在执行 npm link 或从包的根目录执行 npm install 时自动设置,并且可以像任何其他 npm 配置参数一样进行管理。有关该主题的更多信息,请参见 config(1)。
但是,要解决这个问题,如果您只想使用 npm 安装“依赖项”,则以下命令是:
npm install --production
这可以通过查看添加此过滤器的 Git 提交来确认(以及一些其他过滤器 [在下面列出] 以提供此功能)。
npm 可以使用的替代过滤器:
--save => updates dependencies entries in the {{{json}}} file
--force => force fetching remote entries if they exist on disk
--force-latest => force latest version on conflict
--production => do NOT install project devDependencies
--no-color => do not print colors
@dmarr 尝试使用 npm install --production
从包内安装时,npm 将安装开发依赖项(如果当前目录中有 package.json
)。如果它来自另一个位置(npm 注册表、git repo、文件系统上的不同位置),它只会安装依赖项。
npm install some-module
如何不安装 some-module
的开发依赖项。
我建议使用 npm ci
。如果您只想安装生产所需的软件包(如您所写 - 没有 devDependencies
),那么:
npm ci --only=production
或者
NODE_ENV=production npm ci
如果您更喜欢 oldschool npm install
,那么:
npm install --production
或者
NODE_ENV=production npm install
Here is good answer 为什么应该使用 npm ci
。
npm ci
,而不仅仅是 npm install
!
值得一提的是,您可以使用 NODE_ENV
环境变量来实现相同的结果。如果您正在容器化您的 Node 应用程序(例如 Docker),则特别有用。
NODE_ENV=production npm install
上面的代码将安装除开发者之外的所有依赖项(即 devDependencies
)。
如果您需要在您的 Dockerfile
中使用环境变量,可以在 here 中找到更多信息。
环境变量很容易在需要时覆盖(例如,如果您想在 Travis CI 上运行测试套件)。如果是这种情况,您可以执行以下操作:
docker run -v $(pwd):/usr/src/app --rm -it -e NODE_ENV=production node:8 npm install
production 默认值:false 类型:Boolean 设置为 true 以在“生产”模式下运行。在不带任何参数运行本地 npm install 时,devDependencies 不会安装在最顶层。为生命周期脚本设置 NODE_ENV="production"。
快乐的容器化 =)
使用 npm install packageName --save
这将在 dependencies 中添加包,如果您使用 npm install packageName --save-dev
则它是 devDependencies。
npm install packageName --save-dev
应用于添加用于开发目的的包。就像添加 TDD 包(Chai、mocha 等)。哪些用于开发而不是生产。
package.json
中保存依赖项没有问题,但是一旦这些依赖项已经保存,那么如何强制 npm
仅安装一种特定类型的依赖项。当我在这里阅读您的答案时,我没有学到任何有助于解决 OP 提出的问题的知识。
我发现,当尝试为包含节点插件的包安装开发依赖项时,即使您只想安装 devDependencies,也无法避免在运行 npm install --dev 时构建插件。所以,我不得不绕过 npm 的背后:
node -e 'console.log( Object.keys( require( "./package.json" ).devDependencies ) );' | \
sed -e "s/^[^']*'//" -e "s/'.*$//" | \
xargs npm install
或者,更好(更简洁),
node -e 'Object.keys( require( "./package.json" ).devDependencies )
.map( function( item ){ console.log( item ) } );' | xargs npm install
npm install --production --no-optional
它仅安装来自 dependencies
的 deps,将忽略 optionalDependencies
和 devDependencies
需要添加到所选答案:截至目前,包目录(包含 package.json
)中的 npm install
将安装 devDependencies,而 npm install -g
不会安装它们。
-g
不会安装 devDependencies
,但它会全局安装软件包,这通常不是预期的结果。
我在 docker 节点中遇到了一个问题:current-slim(运行 npm 7.0.9),其中 npm install
似乎忽略了 --production
、--only=prod
和 --only=production
。我找到了两种解决方法:
使用 ci 代替(RUN npm ci --only=production),这需要在 npm 安装之前使用最新的 package-lock.json,粗暴地编辑 package.json:
RUN node -e 'const fs = require("fs"); const pkg = JSON.parse(fs.readFileSync("./package.json", "utf-8")); delete pkg.devDependencies; fs.writeFileSync("./package.json", JSON.stringify(pkg), "utf-8");'
这不会编辑您的工作 package.json,只是复制到 docker 容器的那个。当然,这不应该是必要的,但如果是(就像我一样),那就是你的黑客。
npm install --production
是安装生产所需的节点模块的正确方法。查看文档以获取更多详细信息
现在有一个问题,如果你有 npm 5+ 的 package-lock.json。您必须在使用 npm install --production
之前将其删除。
不定期副业成功案例分享
npm install yourpackage.tgz
安装您的包的消费者不会同时获得 devDependencies。然而,情况已经如此。请参阅下面的 Kevin Cox 的回答 (stackoverflow.com/a/15826602/825588)。NODE_ENV=production
,并且我一生都无法弄清楚为什么npm install
不会安装依赖项。感谢您的详尽回答。--dev
选项。请改用--only=dev
。--production
:“使用--production
标志(或当 NODE_ENV 环境变量设置为生产时),npm 将不会安装 devDependencies 中列出的模块。”