我的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版。
当我从项目根目录运行以下命令时,它将同时安装依赖项和devDependencies:
npm install
我觉得这个命令安装了devDependencies:
npm install --dev
如何使npm install只安装依赖项(所以生产环境只安装这些模块),而像npm install-dev这样的东西同时安装依赖项和devDependencies?
值得一提的是,您可以使用NODE_ENV环境变量来实现相同的结果。如果您正在容器化Node应用程序(例如Docker),则特别有用。
NODE_ENV=production npm install
上面的代码将安装除dev依赖项之外的所有依赖项(即devDependencies)。
如果您需要在Dockerfile中使用环境变量,可以在这里找到更多信息。
环境变量很容易在需要时覆盖(例如,如果您想在Travis CI上运行测试套件)。如果是这样的话,你可以这样做:
docker run -v $(pwd):/usr/src/app --rm -it -e NODE_ENV=production node:8 npm install
此处为NPM文档
生产默认值:false类型:布尔设置为true以“生产”模式运行。在没有任何参数的情况下运行本地npm安装时,devDependencies不会安装在最顶层。为生命周期脚本设置NODE_ENV=“production”。
快乐的集装箱化=)
我在docker节点中遇到了一个问题:当前的slim(运行npm 7.0.9),其中npm安装似乎忽略了--production,--only=prod和--only=production。我找到了两种变通方法:
改用ci(RUN-npm-ci-only=production),这需要最新的package-lock.json在npm安装之前,使用以下命令残酷地编辑package.json:
RUN节点-e'const fs=require(“fs”);const pkg=JSON.parse(fs.readFileSync(“./package.JSON”,“utf-8”));删除pkg.devDependencies;fs.writeFileSync(“./package.json”,json.stringify(pkg),“utf-8”);'
这不会编辑您的工作包.json,只会编辑复制到docker容器中的包。当然,这不应该是必要的,但如果是(对我来说),那就是你的黑客。
当在开发环境中的包目录中运行时,npm install命令将安装devDependencies以及其他依赖项(默认)。
在8.x及更高版本中,使用--omit=dev标志仅安装常规依赖项:
npm install --omit=dev
这将只安装依赖项,而不安装devDependencies,无论NODE_ENV环境变量的值如何。
如果使用6.x或更早版本,则需要改用--only=prod标志。
注:在npm第3.3.0版(2015-08-13)之前,该选项被称为--production,即。
npm install --production
您可能还需要--没有可选标志。
值得一提的是,您可以使用NODE_ENV环境变量来实现相同的结果。如果您正在容器化Node应用程序(例如Docker),则特别有用。
NODE_ENV=production npm install
上面的代码将安装除dev依赖项之外的所有依赖项(即devDependencies)。
如果您需要在Dockerfile中使用环境变量,可以在这里找到更多信息。
环境变量很容易在需要时覆盖(例如,如果您想在Travis CI上运行测试套件)。如果是这样的话,你可以这样做:
docker run -v $(pwd):/usr/src/app --rm -it -e NODE_ENV=production node:8 npm install
此处为NPM文档
生产默认值:false类型:布尔设置为true以“生产”模式运行。在没有任何参数的情况下运行本地npm安装时,devDependencies不会安装在最顶层。为生命周期脚本设置NODE_ENV=“production”。
快乐的集装箱化=)