【发布时间】:2019-05-01 03:38:37
【问题描述】:
我项目中的 devDependencies 部分如下所示:
"devDependencies": {
"@babel/cli": "^7.1.5",
"@babel/core": "^7.1.6",
"@babel/node": "^7.0.0",
"@babel/preset-env": "^7.1.6",
"@babel/register": "^7.0.0",
"chai": "^4.2.0",
"chai-http": "^4.2.0",
"eslint": "^5.8.0",
"eslint-config-airbnb-base": "^13.1.0",
"eslint-plugin-import": "^2.14.0",
"mocha": "^5.2.0",
"nodemon": "^1.18.5"
},
它们都是开发的依赖项。
但@babel/cli、@babel/core、@babel/preset-node 是我的构建机器需要 compile ES6/ES7 源到 dist 的唯一开发依赖项,用于生产。
我的构建机器是 jenkins slave,它只运行一次构建作业,带有 --rm 选项,docker 容器。为了优化 DevOps 流程,在这个编译工作中,所有其他部门,甚至生产部门都不是必需的。
但是根据npm/install doc,对我来说最好的命令是
npm install --only=development
我认为仍然是过度杀戮。
如果我运行 npm install @babel/cli @babel/node @babel/preset-env,它们将被添加到 package.json 中的“依赖项”部分。
如果我运行npm install @babel/cli @babel/node @babel/preset-env -D,它们会覆盖到 package.json 中的“devDependencies”部分。
在这两种方法中,npm 不会尊重 package.json 或 package-lock.json 中的版本标签。
我也考虑过将所有其他 devDeps,如 chai、mocha,放到 optionalDependencies,但这不是本节的意思,并且没有命令可以使用 npm install 安装可选的仅 deps。
【问题讨论】:
-
我想要这个功能,因为 flatmap-stream 问题,github.com/dominictarr/event-stream/issues/116,我的一项任务失败了,因为 npm.com 已经删除了注册表中的包。我完全同意。然后我意识到它需要这个包,因为 nodemon 依赖于它。但不知何故,这个编译任务根本不需要 nodemon。
-
也许唯一简单的方法就是unix.stackexchange.com/a/408662/230640
标签: node.js security npm babeljs devops