我在我的package.json文件(缩短版本)中有这个:
{
"name": "a-module",
"version": "0.0.1",
"dependencies": {
"coffee-script": ">= 1.1.3"
},
"devDependencies": {
"stylus": ">= 0.17.0"
}
}
Run Code Online (Sandbox Code Playgroud)
我在Mac 10.6.8上使用NPM版本1.1.1.
当我从项目根目录运行以下命令时,它会安装dependencies 和 devDependencies:
npm install
Run Code Online (Sandbox Code Playgroud)
我的印象是这个命令安装了devDependencies:
npm install --dev
Run Code Online (Sandbox Code Playgroud)
我如何才能使它npm install只安装dependencies(所以生产环境只获得那些模块),而像npm install --dev安装两者dependencies和devDependencies?
Roh*_*ngh 779
该npm install命令将安装devDependencies沿着其他dependencies包的目录中运行时,在开发环境中(默认值).
使用npm install --only=prod(或--only=production)仅 安装dependencies,而devDependencies,不管NODE_ENV环境变量的值如何.
资料来源:npm docs
注意:在npm(2015-08-13)的v3.3.0之前,调用了该选项--production,即npm install --production.
小智 223
我也遇到了这个问题!npm install有些令人困惑,Web帖子继续引入-d/ - dev标志,好像有一个明确的'开发'安装模式.
npm install将安装" dependencies "和" devDependencies "
npm install --production只会安装" 依赖 "
npm install --dev只会安装" devDependencies "
Clo*_*ure 131
新选项是:
npm install --only=prod
Run Code Online (Sandbox Code Playgroud)
如果只想安装devDependencies:
npm install --only=dev
Run Code Online (Sandbox Code Playgroud)
wzr*_*337 45
如果您在2016年阅读此POST,请通过使用实现您想要的
--only={prod[uction]|dev[elopment]}
Run Code Online (Sandbox Code Playgroud)
无论NODE_ENV如何,参数都将导致仅安装devDependencies或仅安装非devDependencies.
来自:https://docs.npmjs.com/cli/install
pie*_*bot 31
如果您已经安装了所有依赖项,并且希望避免再次从NPM下载生产包,则只需键入:
npm prune --production
Run Code Online (Sandbox Code Playgroud)
这将从您的node_modules文件夹中删除您的dev依赖项,如果您尝试自动执行两步过程,这将非常有用
npm prune在两者之间运行将使您不必重新安装所有内容!
cre*_*uru 19
使用"npm install"时,无论模块是"devDependencies"还是"依赖项",模块都会在整个应用程序中加载并可用.这个想法的总和:package.json定义为依赖关系(任何类型)的所有内容都安装到node_modules.
依赖项/ devDependencies/optionalDependencies之间差异的目的是代码的使用者可以使用n/n来安装这些资源.
根据文档:https://npmjs.org/doc/json.html ...
如果有人计划在他们的程序中下载和使用您的模块,那么他们可能不希望或不需要下载和构建您使用的外部测试或文档框架.
在这种情况下,最好在devDependencies哈希中列出这些附加项.
只要设置了--dev配置标志,就会安装这些东西.在执行npm链接或从包的根目录执行npm install时,会自动设置此标志,并且可以像任何其他npm配置参数一样进行管理.有关该主题的更多信息,请参阅config(1).
但是,要解决此问题,如果您只想使用npm安装"依赖项",则以下命令为:
npm install --production
Run Code Online (Sandbox Code Playgroud)
这可以通过查看添加此过滤器的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
Run Code Online (Sandbox Code Playgroud)
@dmarr尝试使用npm install --production
Kev*_*Cox 16
从软件包内部安装时,npm将安装dev依赖项(如果package.json当前目录中有一个).如果它来自另一个位置(npm注册表,git repo,文件系统上的不同位置),它只安装依赖项.
mar*_*rix 10
我建议使用npm ci. 如果您只想安装生产所需的软件包(如您所写 - 没有devDependencies),则:
npm ci --only=production
Run Code Online (Sandbox Code Playgroud)
或者
NODE_ENV=production npm ci
Run Code Online (Sandbox Code Playgroud)
如果你更喜欢老学校,npm install那么:
npm install --production
Run Code Online (Sandbox Code Playgroud)
或者
NODE_ENV=production npm install
Run Code Online (Sandbox Code Playgroud)
这是为什么你应该使用npm ci.
值得一提的是,您可以使用NODE_ENV环境变量来达到相同的结果。如果您正在容器化 Node 应用程序(例如 Docker),则特别有用。
NODE_ENV=production npm install
Run Code Online (Sandbox Code Playgroud)
上面的代码将安装除开发依赖项之外的所有依赖项(即devDependencies)。
如果您需要在您的环境变量中使用更多信息,可以在这里Dockerfile找到。
环境变量很容易在需要时被覆盖(例如,如果您想在 Travis CI 上运行测试套件)。如果是这种情况你可以这样做:
docker run -v $(pwd):/usr/src/app --rm -it -e NODE_ENV=production node:8 npm install
Run Code Online (Sandbox Code Playgroud)
生产
- 默认值:假
类型:布尔值 设置为 true 以在“生产”模式下运行。
- 当不带任何参数运行本地 npm install 时,devDependency 不会安装在最顶层。
- 为生命周期脚本设置 NODE_ENV="product"。
快乐的容器化=)
npm install --production --no-optional
它只安装依赖于dependencies并且会忽略optionalDependencies和devDependencies
我在 docker node:current-slim (运行 npm 7.0.9)中遇到了一个问题,其中npm install似乎忽略了--production,--only=prod和--only=production。我找到了两个解决方法:
RUN npm ci --only=production),这需要最新的 package-lock.jsonnpm install,粗暴地编辑 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 容器的 package.json。当然,这不是必需的,但如果有必要(就像对我来说),那就有你的技巧了。
| 归档时间: |
|
| 查看次数: |
288831 次 |
| 最近记录: |