我怎样才能在NPM脚本中引用包的版本?

问题描述 投票:13回答:1

我想引用我的包版本在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个回答
47
投票

1) Referencing package version in npm-scripts.

npm-script的,你可以使用变量version引用npm_package_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) Referencing package version in node script.

包的版本也可以在一个应用程序/节点脚本引用(即build.js)如下:

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

3) Replacing a placeholder string in a .js file with package version.

实现这一目标的另一种方法是指定你的JavaScript文件中的占位符文本字符串。比方说,我们有一个build.js文件命名,该文件中我们有一个VERSION命名如下声明的变量:

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

正如你所看到的,占位符文本字符串是@VERSION@

然后,您可以安装并使用在replace称为npm-script包如下:

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

运行npm run add-version将替换包的版本@VERSION@(即1.0.0)的情况下,在文件命名build.js。该解决方案将硬编码NPM包版本到结果文件。

注:在add-version脚本字符串(如上图)目前使用的$前缀(即$npm_package_version)访问变量,因此这将仅在bash shell中运行成功。但是,对于跨平台的使用情况,您需要按照第一个(上面)中说明使用cross-var。在这种情况下add-version脚本可以被定义为如下:

{
  ...
  "version": "1.0.0",
  "scripts": {
    "add-version":  "cross-var replace -s \"@VERSION@\" $npm_package_version build/build.js"
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.