如何在npm脚本中引用包版本?

Eva*_*tti 26 npm package.json npm-scripts

我想在npm脚本中引用我的包版本,以便在应用程序中显示当前版本.就像是

{
  "name": "bla",
  "version": "1.0.0",
  "author": "bla bla",
  "scripts": {
    "build": "node VERSION=<<package.version>> build/build.js"
  }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?

Rob*_*obC 52

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

npm-script的,你可以参考version使用变量npm_package_version.例如:


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

包版本也可以在您的app/node脚本(即build.js)中引用,如下所示:

const VERSION = process.env.npm_package_version;
console.log(VERSION); // --> 1.0.0
Run Code Online (Sandbox Code Playgroud)

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

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

// build.js
const VERSION = '@VERSION@'
Run Code Online (Sandbox Code Playgroud)

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

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

{
  ...
  "version": "1.0.0",
  "scripts": {
    "add-version":  "replace -s \"@VERSION@\" $npm_package_version build/build.js"
  }
}
Run Code Online (Sandbox Code Playgroud)

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

注意:脚本中的to字符串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"
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 很好的总结。许多其他 npm 变量可用 - 请参阅 https://gist.github.com/moos/4635bda5b04dc8113d8ea7ee974cabc2。 (2认同)
  • @Moos - 要以编程方式列出特定于您的项目的所有 _`npm__`_ 环境变量,您可以使用 `npm run env` 命令 - 如我在[此处](https://stackoverflow.com/questions)找到的答案中所述/59172784/命令列出所有-npm-package-vars/59174920#59174920)。 (2认同)