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

如何在Angular开发的Word Add-in中通过编程方式获取manifest文件中的版本号

如何在Angular开发的Word Add-in中通过编程方式获取manifest文件中的版本号

嘿,我完全理解你的困扰——Office.js确实没把这个功能做的很直观,而且你的那些限制条件也把常用的快速方案都堵死了。不过别担心,我有个靠谱的解决思路刚好符合你的情况,一起来看看:

方案一:构建时自动将Manifest版本注入Angular应用

这是最推荐的方法,因为它不需要在运行时获取manifest,也不依赖Office.js,而且是自动化的,不用手动同步版本号。具体步骤如下:

  1. 安装XML解析依赖
    首先我们需要一个工具来解析manifest的XML文件,安装xml2js作为开发依赖:
npm install xml2js --save-dev
  1. 编写版本同步脚本
    在项目根目录新建一个名为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);
  });
});
  1. 配置预构建脚本
    打开package.json,在scripts部分添加一个预构建脚本,让它在每次构建前自动运行上面的同步脚本:
"scripts": {
  "prebuild": "node sync-manifest-version.js",
  "build": "ng build",
  // 保留你原有的其他脚本...
}

prebuild是npm的钩子脚本,会在你执行npm run build之前自动运行,这样每次构建应用时,都会把最新的manifest版本号注入到Angular项目中。

  1. 在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 09:48:01