我想在npm脚本中引用我的包版本,以便在应用程序中显示当前版本。 像
这样的东西{
"name": "bla",
"version": "1.0.0",
"author": "bla bla",
"scripts": {
"build": "node VERSION=<<package.version>> build/build.js"
}
}
有办法做到这一点吗?
答案 0 :(得分:36)
在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
包版本也可以在您的app / node脚本(即build.js
)中引用,如下所示:
const VERSION = process.env.npm_package_version;
console.log(VERSION); // --> 1.0.0
实现此目的的另一种方法是在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
脚本(上面)中的 to 字符串当前使用$
前缀(即$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"
}
}