如何在 npm 脚本中引用包版本?
Posted
技术标签:
【中文标题】如何在 npm 脚本中引用包版本?【英文标题】:How can I reference package version in npm script? 【发布时间】: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"
有没有办法做到这一点?
【问题讨论】:
【参考方案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 找到的答案中所述@.
很高兴知道。谢谢。以上是关于如何在 npm 脚本中引用包版本?的主要内容,如果未能解决你的问题,请参考以下文章
yarn create @scope/package 引用旧版本
如何通过 postinstall npm 脚本自动将文件从包复制到本地目录?