我正在开发一个可在npm上使用的sdk。
sdk应该能够将其版本提供给客户端。我希望这个版本与package.json版本相同。
但是当我在我的sdk中放置import {version} from '../package.json'
时,我看到所有package.json都被添加到构建中。
有没有一种获得版本的好方法,或者我是否会被强制在我的sdk中设置版本变量,类似于npm version
上的bash脚本?或者你会怎么做?
答案 0 :(得分:0)
如果您使用的是nodejs,我认为您可以将环境和应用程序版本保存在独立的环境文件中。例如,我将我的设置保存在名为.env的文件上,并使用名为dotenv的npm模块读取它们
答案 1 :(得分:0)
您可以通过在JavaScript文件中指定占位符文本字符串来实现此目的。假设我们有一个名为build.js
的文件,在该文件中我们有一个名为VERSION
的变量,声明如下:
// build.js
const VERSION = '@VERSION@'
如您所见,占位符文本字符串为@VERSION@
。
然后,您可以在replace中安装和使用名为npm-script的软件包,如下所示:
要安装replace
,您需要cd
到项目目录并运行:
npm install replace --save-dev
然后将以下内容添加到scripts
的{{1}}部分:
package.json
<强>运行:强>
通过CLI运行以下命令以发布包时:
{
...
"version": "1.0.0",
"scripts": {
"add-version": "replace -s \"@VERSION@\" $npm_package_version build/build.js",
"prepublishOnly": "npm run add-version"
}
}
将调用$ npm publish
脚本(pre hook),然后调用prepublishOny
脚本。
add-version
脚本将在名为add-version
的文件中用包版本(即@VERSION@
)替换1.0.0
的实例。此解决方案将npm软件包版本硬编码到生成的文件中。
跨平台
build.js
脚本(上面)中的到字符串当前使用add-version
前缀(即$
)来访问变量,所以这只会在bash shell上成功运行。
但是,对于跨平台使用,您需要使用cross-var。
要安装$npm_package_version
,您需要cross-var
到项目目录并运行:
cd
然后按如下方式重新定义npm install cross-var --save-dev
脚本:
add-version