【问题标题】:How can I reference package version in npm script?如何在 npm 脚本中引用包版本?
【发布时间】:2018-07-14 13:30:56
【问题描述】:

我想在 npm 脚本中引用我的包版本,以便可以在应用程序中显示当前版本。 类似的东西

{
  "name": "bla",
  "version": "1.0.0",
  "author": "bla bla",
  "scripts": {
    "build": "node VERSION=<<package.version>> build/build.js"
  }
}

有没有办法做到这一点?

【问题讨论】:

    标签: npm package.json npm-scripts


    【解决方案1】:

    1) 在 npm-scripts 中引用包版本。

    npm-script 中,您可以使用变量npm_package_version 引用version。例如:

    • 使用 bash shell(例如 Linux、macOS):

      {
        ...
        "version": "1.0.0",
        "scripts": {
          "build": "echo $npm_package_version"
        }
      }
      

      注意$ 前缀

    • 使用 Windows(例如 cmd.exe、Powershell):

      {
        ...
        "version": "1.0.0",
        "scripts": {
          "build": "echo %npm_package_version%"
        }
      }
      

      注意% 前缀和后缀

    • 跨平台

      要使用一种跨平台语法,请查看包cross-var


    2) 在节点脚本中引用包版本。

    也可以在您的应用程序/节点脚本(即build.js)中引用包版本,如下所示:

    const VERSION = process.env.npm_package_version;
    console.log(VERSION); // --> 1.0.0
    

    3) 将 .js 文件中的占位符字符串替换为包版本。

    实现此目的的另一种方法是在 JavaScript 文件中指定占位符文本字符串。假设我们有一个名为 build.js 的文件,在该文件中我们有一个名为 VERSION 的变量,声明如下:

    // build.js
    const VERSION = '@VERSION@'
    

    如您所见,占位符文本字符串为@VERSION@

    然后您可以在npm-script 中安装和使用名为replace 的软件包,如下所示:

    {
      ...
      "version": "1.0.0",
      "scripts": {
        "add-version":  "replace -s \"@VERSION@\" $npm_package_version build/build.js"
      }
    }
    

    运行npm run add-version 将在名为build.js 的文件中将@VERSION@ 的实例替换为包版本(即1.0.0)。此解决方案会将 npm 包版本硬编码到结果文件中。

    注意:add-version 脚本(上图)中的 to 字符串当前使用$ 前缀(即$npm_package_version)来访问变量,因此这只会在bash 外壳。但是,对于跨平台使用,您需要使用cross-var,如第一节(上文)中所述。在这种情况下,add-version 脚本可以定义如下:

    {
      ...
      "version": "1.0.0",
      "scripts": {
        "add-version":  "cross-var replace -s \"@VERSION@\" $npm_package_version build/build.js"
      }
    }
    

    【讨论】:

    • 不错的总结。许多其他 npm 变量可用——请参阅gist.github.com/moos/4635bda5b04dc8113d8ea7ee974cabc2
    • @Moos - 要以编程方式列出特定于您的项目的所有 npm_ 环境变量,您可以使用npm run env 命令 - 如我在@987654325 找到的答案中所述@.
    • 很高兴知道。谢谢。
    猜你喜欢
    • 2020-09-22
    • 2022-08-14
    • 1970-01-01
    • 1970-01-01
    • 2020-06-05
    • 2021-10-03
    • 2018-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多