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

2023-12-20

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

{
  "name": "bla",
  "version": "1.0.0",
  "author": "bla bla",
  "scripts": {
    "build": "node VERSION=<<package.version>> build/build.js"
  }
}

有没有办法做到这一点?


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

In npm-script你可以参考version使用变量npm_package_version。例如:

  • 使用 bash shell(例如 Linux、macOS):

    {
      ...
      "version": "1.0.0",
      "scripts": {
        "build": "echo $npm_package_version"
      }
    }
    

    请注意$ prefix

  • 使用 Windows(例如 cmd.exe、Powershell):

    {
      ...
      "version": "1.0.0",
      "scripts": {
        "build": "echo %npm_package_version%"
      }
    }
    

    请注意%前缀和后缀

  • 跨平台

    要使用一种跨平台语法,请查看该包跨变量 https://www.npmjs.com/package/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@.

然后您可以安装并使用名为的包replace https://github.com/harthur/replace in an npm 脚本 https://docs.npmjs.com/misc/scripts如下:

{
  ...
  "version": "1.0.0",
  "scripts": {
    "add-version":  "replace -s \"@VERSION@\" $npm_package_version build/build.js"
  }
}

Running 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"
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 npm 脚本中引用包版本? 的相关文章

随机推荐

  • jQuery 渐变插件?

    有没有什么好的jQuery渐变插件 我找到了一个 但它使用旧的 jQuery 当我使用最新版本时 所以它可能不适用于最新版本 我不知道你是否已经测试过这些插件 JQuery 渐变插件 http www ajaxupdates com jqu
  • 如何在 ASP.NET CORE 中为多个策略创建自定义授权属性

    我想授权一个操作控制器可以通过多个策略访问 e g Authorize Policies ManageAllCalculationPolicy Policies ManageAllPriceListPolicy public async T
  • Angular 基本 href 未显示在 URL 中

    我正在尝试将我的角度应用程序部署到生产环境 该环境在 url 中具有额外的位置步骤 例如www 生产服务器 com name of my app 附加到其后 当我通过 localhost 4200 上的 Angular cli 运行它并通过
  • python 求图交集

    有谁知道如何找到这两个图的交集 下图 energ ac price compvend and energ ac1 price compven1是一组x y values 请注意以下代码 它从数据库获取值 然后绘制两个图表 我只能手动获取路口
  • javascript中的运算符和事件

    update for i in window if i onhashchange console log i window i prints onchangechange undefined 在支持 onhashchange 事件的浏览器上
  • Eclipse GIT:当前分支未配置为拉取

    我正在和一个朋友一起开发一款基于图块的 RPG 他必须离开几个星期 我们决定是时候使用版本控制 git 了 我开始后悔了 几个小时后 我们设法让它工作到以下地步 我在 github 上创建了一个存储库 将他添加为协作者 我将eclipse中
  • ElasticSearch 0.90.2 在请求端口 9300 时出现 StreamCorruptedException

    我刚刚在 Windows XP 上解压了 elasticsearch 0 90 2 zip 并启动了 bin elasticsearch bat 我已将 JAVA HOME 设置为 C Program Files Java jre7 因为第
  • 占位符不适用于 Internet Explorer

    以下格式的文本框占位符不适用于 Internet Explorer 是否有办法在 Internet Explorer 中显示 TextBox 的占位符
  • 如何恢复 pip 升级

    我刚才执行了以下命令 pip install upgrade ipykernel 然而 我得到了 Requirement already satisfied ipykernel in anaconda3 lib python3 8 site
  • Pandas DataFrame 上的条件逻辑

    如何将条件逻辑应用于 Pandas DataFrame 请参阅下面所示的数据框 data desired output 0 1 False 1 2 False 2 3 True 3 4 True 我的原始数据显示在 数据 列中 所需的输出显
  • 如何在 Java 中执行 Windows 命令?

    我正在开发一个项目 它将为您提供 Windows 命令列表 当您选择一个时 它将执行该命令 但是 我不知道该怎么做 我打算在 Visual C 或 C 中完成它 但 C 类太复杂 我不想在 Visual C 中制作表单和垃圾 在控制台应用程
  • 在 GNU 汇编器中处理或记住 cmp 的向后参数的好方法是什么?

    以下是一些采用 Intel 语法的汇编代码 Jump to done if rsi gt rax cmp rsi rax jae done 这对我的大脑来说是有道理的 如果 rsi 高于或等于 rax 你就会跳 匹配中参数的顺序cmp操作说
  • 在 n 个皇后主要冲突搜索上表现不佳

    我正在实施 nqueens min conflict 搜索 如所述 Norvig S Peter J R and 2014 Artificial Intelligence A Modern Approach In Pearson Vol 5
  • gem install Rails 不安装rails

    当我尝试安装导轨时 root li44 48 gem install rails Successfully installed rails 3 2 1 1 gem installed Installing ri documentation
  • 从黑莓通知栏打开应用程序

    对于我的应用程序 我需要在通知栏中创建一个图标 我能够做到这一点 我的问题是我需要从通知栏打开此应用程序 当用户选择通知屏幕时 我的应用程序状态应该显示 当用户选择我的应用程序时 我的应用程序应该直接打开 看看下面的类 Applicatio
  • 在 Delphi XE2 中同时调试多个应用程序

    是否可以在一台机器上同时在 Delphi XE2 中调试多个应用程序 我有两个 实际上是三个 但中间的一个工作正常 相互发送消息 我希望能够同时调试这两个程序 这可能吗 如果是这样 怎么办 Thanks 是的 这是可能的 确保项目组中要调试
  • ASP.NET WebForm App_Theme 导致编译错误

    我有一个引用这样的主题的 WebForm TestTheme 只包含一个 Test skin 文件 其内容如下
  • 如何在 Crystal Report XI 中的运行时禁用参数提示?

    如何在 Crystal Report XI 运行时禁用子报表中的参数提示 我用的是Ms VS 2005 报告也包括在内 其他报表功能与水晶报表功能相同 其他报表在运行时不显示提示 不包括子报表 提示出现一份包含子报告 所以你可能有任何建议
  • MSBuild - 当我进行部署时如何强制“AfterBuild”目标?

    我有以下设置 ASP Net MVC Net 4 0 解决方案 其中有 5 个项目 以及几个解决方案配置 站点 1 阶段 站点 1 实时 站点 2 阶段 ETC 原因很简单 我们将相同的代码库部署到具有不同配置设置的多个服务器 为了管理这些
  • 如何在 npm 脚本中引用包版本?

    我想在 npm 脚本中引用我的包版本 以便我可以在应用程序中显示当前版本 就像是 name bla version 1 0 0 author bla bla scripts build node VERSION lt