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

TypeScript模块化开发Custom Function Add-in导入异常咨询

核心结论
  • 未经过打包、直接在自定义函数源码中使用原生ES模块import语法的开发模式,不属于Office Add-in官方原生支持的场景,和是否开启共享运行时没有关系,你遇到的加载故障是这个机制导致的必然结果。
  • 没有强制要求必须使用Webpack,所有支持多模块依赖合并、输出符合脚本加载规范的构建工具都可使用,但禁止直接将TypeScript编译输出的ESModule格式文件作为自定义函数入口引用。

故障原理

Office平台加载自定义函数脚本时,默认按普通全局脚本注入运行上下文,不会原生处理ES模块的依赖解析、拉取逻辑:

  • 脚本中保留原生import语句时,运行时会直接抛出模块加载相关的语法/权限错误,中断整个入口脚本的执行。
  • 入口脚本执行中断后,不仅CustomFunctions.associate的函数注册逻辑无法运行,同上下文内的任务窗格、功能区命令初始化代码也会被连带阻塞,直接表现为任务窗格卡在加载页、自定义函数无返回结果。
  • 网传的「开启共享运行时支持外部导入」说法是误读:共享运行时仅实现了自定义函数、任务窗格、命令的上下文共享,不会修改自定义函数脚本本身的加载规则,因此单独开启该配置无法解决import导致的报错。

可行落地方案

  • 所有模块导入逻辑必须经过打包工具处理:Webpack、Rollup、esbuild、Vite库模式均可使用,构建时需将自定义函数入口及所有依赖合并为单IIFE格式文件,输出产物中不能保留原生import/export语句,确保脚本加载后可直接执行完成函数注册。
  • 如果使用官方Yeoman生成器创建的项目模板,默认已经配置好对应的Webpack构建规则,源码中正常编写import语句即可,不要手动修改tsconfig.json中的module配置为ESNext/ESModule,保持默认配置交由构建工具处理模块逻辑即可。
  • 不要尝试手动给自定义函数脚本标签添加type="module"属性,自定义函数的脚本注入逻辑由Office平台侧控制,手动修改属性不会生效,还会触发加载项安全校验报错。

你提供的测试代码如果直接通过tsc编译为ESModule格式,输出文件首行保留的import语句会直接打断脚本执行;经过构建工具打包合并模块、移除原生import语句后,即可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 23:42:28