【问题标题】:How to detect that the script is running with npm or yarn?如何检测脚本正在使用 npm 或 yarn 运行?
【发布时间】:2019-01-17 00:29:57
【问题描述】:

我需要为 npm 和 yarn 编写通用脚本。

npm 的 package.json:

{
  "scripts": {
    "build:clean": "rim-raf dist",
    "test:clean": "rim-raf coverage",
    "clean": "npm run build:clean; npm run test:clean"
  }
}

纱线的package.json:

{
  "scripts": {
    "build:clean": "rim-raf dist",
    "test:clean": "rim-raf coverage",
    "clean": "yarn run build:clean; yarn run test:clean"
  }
}

npm 和 yarn 的 package.json:

我通常使用小技巧:***$_***
{
  "scripts": {
    "build:clean": "rim-raf dist",
    "test:clean": "rim-raf coverage",
    "clean": "$_ run build:clean; $_ run test:clean"
  }
}

但有时它不能正常工作。

有一些合法的方法可以做到这一点吗?

【问题讨论】:

    标签: node.js npm yarnpkg npm-scripts


    【解决方案1】:

    我想我找到了最佳解决方案。

    我在 npm env 中进行了搜索,并将其与 yarn env 进行了比较。 我发现变量 $npm_execpath 包含使用的包管理器的路径。 (对于 Windows %npm_execpath%)

    npm 和 yarn 的 package.json:

    {
      "scripts": {
        "build:clean": "rim-raf dist",
        "test:clean": "rim-raf coverage",
        "clean": "$npm_execpath run build:clean; $npm_execpath run test:clean"
      }
    }
    

    我的 npm 和 yarn 最终解决方案 package.json 可在 Linux、Windows、Mac 上运行:

    如果添加包cross-var,脚本可以在Linux、Windows和Mac上运行。

    {
      "scripts": {
        "build:clean": "rim-raf dist",
        "test:clean": "rim-raf coverage",
        "clean": "cross-var $npm_execpath run build:clean; cross-var $npm_execpath run test:clean"
      }
    }
    

    【讨论】:

      【解决方案2】:

      你可以试试这个第 3 方模块:

      https://github.com/BendingBender/yarpm

      【讨论】:

      • 谢谢,我看看。这不是我所期望的,但如果我没有找到更好的解决方案,我会使用 yarpm。
      猜你喜欢
      • 2020-03-03
      • 2018-04-21
      • 1970-01-01
      • 2021-08-19
      • 2020-01-20
      • 1970-01-01
      • 1970-01-01
      • 2019-04-01
      • 1970-01-01
      相关资源
      最近更新 更多