如何在Angular开发的Word Add-in中通过编程方式获取manifest文件中的版本号
如何在Angular开发的Word Add-in中通过编程方式获取manifest文件中的版本号
嘿,我完全理解你的困扰——Office.js确实没把这个功能做的很直观,而且你的那些限制条件也把常用的快速方案都堵死了。不过别担心,我有个靠谱的解决思路刚好符合你的情况,一起来看看:
方案一:构建时自动将Manifest版本注入Angular应用
这是最推荐的方法,因为它不需要在运行时获取manifest,也不依赖Office.js,而且是自动化的,不用手动同步版本号。具体步骤如下:
- 安装XML解析依赖
首先我们需要一个工具来解析manifest的XML文件,安装xml2js作为开发依赖:
npm install xml2js --save-dev
- 编写版本同步脚本
在项目根目录新建一个名为sync-manifest-version.js的文件,代码如下:
const fs = require('fs'); const xml2js = require('xml2js'); // 读取并解析本地的manifest.xml文件 const parser = new xml2js.Parser(); fs.readFile('./manifest.xml', (err, data) => { if (err) { console.error('读取manifest文件出错:', err); return; } parser.parseString(data, (parseErr, result) => { if (parseErr) { console.error('解析manifest文件出错:', parseErr); return; } // 提取版本号(注意:根据你的manifest结构调整路径,通常是OfficeApp下的Version节点) const manifestVersion = result.OfficeApp.Version[0]; // 生成Angular可以直接导入的常量文件 const versionFileContent = `export const MANIFEST_VERSION = '${manifestVersion}';`; fs.writeFileSync('./src/app/manifest-version.ts', versionFileContent); console.log('Manifest版本已同步到应用:', manifestVersion); }); });
- 配置预构建脚本
打开package.json,在scripts部分添加一个预构建脚本,让它在每次构建前自动运行上面的同步脚本:
"scripts": { "prebuild": "node sync-manifest-version.js", "build": "ng build", // 保留你原有的其他脚本... }
prebuild是npm的钩子脚本,会在你执行npm run build之前自动运行,这样每次构建应用时,都会把最新的manifest版本号注入到Angular项目中。
- 在Angular组件中使用版本号
现在你可以在任何组件里导入这个版本常量了:
import { Component } from '@angular/core'; import { MANIFEST_VERSION } from './manifest-version'; @Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.css'] }) export class AppComponent { public currentManifestVersion = MANIFEST_VERSION; constructor() { console.log('当前Add-in的Manifest版本:', this.currentManifestVersion); } }
方案二:手动维护版本常量(不推荐)
如果你暂时不想折腾构建脚本,也可以手动创建一个版本常量文件,比如src/app/constants/manifest-version.ts,然后每次修改manifest版本时同步更新这个文件里的值。不过这种方法很容易出错——毕竟每次发版都要记得改两个地方,时间久了肯定会有忘记的时候。
示例代码:
// src/app/constants/manifest-version.ts export const MANIFEST_VERSION = '1.2.3';
使用方式和方案一一样,但长期维护的话风险比较高,所以还是优先推荐方案一。
为什么这些方案符合你的限制条件?
- 不需要在SourceLocation里加查询参数:版本号是在构建时就嵌入到应用代码里的,完全不用通过URL传递。
- 不需要访问manifest的托管路径:我们是在构建阶段读取本地的manifest文件,根本不需要关心它部署后的位置。
- 不依赖Office.js的API:既然Office.js没暴露这个元数据,那我们就绕开它,从构建流程上解决问题。
内容来源于stack exchange
相关产品推荐
相关产品推荐

