【问题标题】:How to install only babel related devDependencies in package.json?如何在 package.json 中只安装 babel 相关的 devDependencies?
【发布时间】: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。

【问题讨论】:

标签: node.js security npm babeljs devops


【解决方案1】:

删除 package-lock.json 并运行

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

【讨论】:

    【解决方案2】:

    好的。要清楚。你的问题是在 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

    【讨论】:

    猜你喜欢
    • 2017-01-17
    • 2012-03-05
    • 2014-05-22
    • 1970-01-01
    • 1970-01-01
    • 2016-08-28
    • 1970-01-01
    • 2014-11-26
    相关资源
    最近更新 更多