You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改ng-packagr工作流以在Angular库中嵌入编译时动态版本信息

问题解答

可以实现,无需修改ng-packagr的核心工作流程,通过构建前置钩子自动生成版本常量文件的方式即可完成需求,具体实现方案如下:

核心思路

利用Node脚本在打包前自动生成包含版本信息的TypeScript常量文件,纳入Angular库的源码体系后导出服务,最终会被ng-packagr正常编译进打包产物,使用者可直接调用。

具体实现步骤

  • 步骤1:确定版本信息来源
    通常版本信息直接从库根目录的package.json读取,CI环境下的构建哈希、构建时间等信息可以从环境变量中获取。

  • 步骤2:编写版本常量自动生成脚本
    在项目根目录新建scripts/generate-version.js脚本,内容参考如下:

    const fs = require('fs');
    const path = require('path');
    
    // 读取package.json版本信息
    const packageJson = require('../package.json');
    // 读取环境变量中的构建信息,本地开发默认取local标识
    const buildHash = process.env.COMMIT_HASH || 'local-build';
    const buildTime = new Date().toISOString();
    
    const versionFileContent = `
    

// 此文件为构建自动生成,请勿手动修改
export const LIB_VERSION = {
coreVersion: '${packageJson.version}',
prereleaseTag: '${packageJson.version.includes('-') ? packageJson.version.split('-')[1].split('.')[0] : 'stable'}',
buildHash: '${buildHash}',
buildTime: '${buildTime}'
};
`;
// 将生成的常量文件写入库的源码目录
fs.writeFileSync(path.resolve(__dirname, '../projects/你的库名称/src/lib/version.ts'), versionFileContent.trim());

- 步骤3:配置构建钩子自动执行脚本
修改项目根目录`package.json`的打包脚本,在ng-packagr执行前先运行生成脚本:
```json
{
  "scripts": {
    "build:lib": "node scripts/generate-version.js && ng build 你的库名称 --configuration production"
  }
}
  • 步骤4:实现VersionService并对外导出
    在库的源码中实现版本服务,引入自动生成的常量:
    import { Injectable } from '@angular/core';
    import { LIB_VERSION } from './version';
    
    @Injectable({
      providedIn: 'root'
    })
    export class VersionService {
      getCoreVersion(): string {
        return LIB_VERSION.coreVersion;
      }
    
      getPrereleaseTag(): string {
        return LIB_VERSION.prereleaseTag;
      }
    
      getFullBuildInfo() {
        return {
          hash: LIB_VERSION.buildHash,
          time: LIB_VERSION.buildTime
        };
      }
    }
    
    最后在库的public-api.ts中导出服务和常量,供使用者导入使用:
    export * from './lib/version.service';
    export * from './lib/version';
    

注意事项

  • 自动生成的version.ts文件建议加入.gitignore,避免提交到代码仓库
  • CI环境构建时提前把构建哈希、构建号等信息注入到环境变量,脚本即可自动读取到对应值
  • 该方案兼容所有主流ng-packagr版本,无需修改ng-packagr本身的逻辑

内容的提问来源于stack exchange,提问作者lanoxx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 18:39:00