在 Angular (>= 2) 应用程序中,如何将 npm package.json 文件中的版本信息包含到已编译的输出文件中?

Posted

技术标签:

【中文标题】在 Angular (>= 2) 应用程序中,如何将 npm package.json 文件中的版本信息包含到已编译的输出文件中?【英文标题】:In an Angular (>= 2) application, how to include version information from npm package.json file into the compiled output files? 【发布时间】:2017-12-03 15:07:11 【问题描述】:

信息:

    我使用 @angular/cli 创建了一个 Angular(版本 >= 2)应用程序。

    此应用程序正在进行版本更改。

    我确实使用命令npm version majornpm version minornpm version patch 在我的package.json 文件中更新了我的应用程序的语义版本信息。

    当我运行 ng buildng build --prod 时,我无法在“dist”输出文件夹的任何文件中找到此版本信息。

问题:

有没有办法自动将我的应用程序的版本信息从 package.json 文件带入其中一个输出文件(可能在 html 文件或 js 文件中)?

来自我的package.json 文件的示例:


  "name": "angular-ui",
  "version": "17.6.27",
  "description": "My awesome UI application",
  "license": "MIT",
  ...

理想情况下,我想创建一个“关于”组件,当我访问类似于以下内容的 URL 时,我想在其中发布应用程序的版本信息:

http://localhost:4200/about

页面上的预期输出:

Application version: v17.6.27

【问题讨论】:

【参考方案1】:

您可以创建一个自定义脚本,该脚本将从您的 package.json 中读取信息并运行 echo "export const APP_VERSION = $version" > src/app/version.ts

然后你在构建之前调用这个脚本。

如果您使用 ng-cli 创建应用,您的 package.json 中应该已经有脚本条目。类似的东西:

"scripts": 
  "ng": "ng",
  "changelog": "standard-changelog",
  "start": "ng serve",
  "build": "ng build",
  "test": "ng test",
  "lint": "ng lint",
  "e2e": "ng e2e"
,

您可以将 build 替换为

"scripts": 
  "build": "sh version-script.sh && ng build",

我认为您可以找到一些比糟糕的 script.sh 做得更好的精美工具,并在构建之前将它们连接起来。

【讨论】:

这看起来是个好主意。谢谢@Noémi Salaün,我会试试这个,让你知道这是怎么回事。

以上是关于在 Angular (>= 2) 应用程序中,如何将 npm package.json 文件中的版本信息包含到已编译的输出文件中?的主要内容,如果未能解决你的问题,请参考以下文章

Angular 2 (ng2) 在 [class.whatever] 中使用异步管道

为啥 Angular 2 渲染应用程序组件模板两次

如何在 Angular 2 中使用 DataTable

无法在 Angular 2 应用程序中提交 HTML 表单

使用 .net mvc 在 IIS angular 2 应用程序上发布

Angular 2.x 在 body 标签上绑定类