如何在package.json中仅安装与babel相关的devDependencies?

时间:2018-11-29 06:10:29

标签: node.js security npm babel devops

我项目中的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是我的构建机器将{6} {1}}的ES6 / ES7源分发到生产环境中唯一需要的dev依赖。 / p>

我的建筑机器是jenkins从属设备,仅使用--rm选项和docker容器一次运行建筑工作。为了优化DevOps流程,在此编译工作中,不需要所有其他部门,甚至是生产部门。

但是根据npm/install doc,对我来说最好的命令是

compile

我认为仍然是要杀人。

如果我运行npm install --only=development ,它们将被添加到package.json的“ dependencies”部分。

如果我运行npm install @babel/cli @babel/node @babel/preset-env,它们将覆盖package.json中的“ devDependencies”部分。

在这两种方法中,npm不会接受package.json或package-lock.json中的version标签。

我还考虑过将所有其他devDeps(例如chai,mocha)放入optionalDependencies,但这并不是本节的意思,并且没有命令安装带有{{1 }}。

2 个答案:

答案 0 :(得分:0)

好。要清楚。您的问题是在NPM 5.8.0之后。当他们默认更改--save选项时。

针对您的问题。我认为您可以编写类似以下内容的bash函数:

function npm-temp-install {
    pkg=`cat package.json | jq -r ".devDependencies.$1" | sed "s/^/$1@/"`
    npm install $pkg -D
}

然后,您可以运行npm-temp-install @babel/cli来安装devDependencies中列出的特定版本的软件包。

对于您的第一条评论: 我认为您可以使用npx运行nodemon。来自其website。它说,如果在node_modules/.bin中找不到命令,它将帮助您下载软件包。并且不会更改package.jsonpackage-lock.json

答案 1 :(得分:0)

删除package-lock.json并运行

npm install @babel/cli @babel/node @babel/preset-env -D