从package.json获取版本的好方法

时间:2018-04-18 10:19:27

标签: javascript npm npm-scripts

我正在开发一个可在npm上使用的sdk。

sdk应该能够将其版本提供给客户端。我希望这个版本与package.json版本相同。

但是当我在我的sdk中放置import {version} from '../package.json'时,我看到所有package.json都被添加到构建中。

有没有一种获得版本的好方法,或者我是否会被强制在我的sdk中设置版本变量,类似于npm version上的bash脚本?或者你会怎么做?

2 个答案:

答案 0 :(得分:0)

如果您使用的是nodejs,我认为您可以将环境和应用程序版本保存在独立的环境文件中。例如,我将我的设置保存在名为.env的文件上,并使用名为dotenv的npm模块读取它们

答案 1 :(得分:0)

您可以通过在JavaScript文件中指定占位符文本字符串来实现此目的。假设我们有一个名为build.js的文件,在该文件中我们有一个名为VERSION的变量,声明如下:

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

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

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

  1. 要安装replace,您需要cd到项目目录并运行:

    npm install replace --save-dev
    
  2. 然后将以下内容添加到scripts的{​​{1}}部分:

    package.json
  3. <强>运行:

    通过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

    1. 要安装$npm_package_version,您需要cross-var到项目目录并运行:

      cd
    2. 然后按如下方式重新定义npm install cross-var --save-dev 脚本:

      add-version