我按照本教程开始了一个带有 Typescript&React 项目的 Office Web 插件:https ://github.com/OfficeDev/office-js-docs-pr/blob/master/docs/includes/file-get-started-excel-反应.md。任何任务窗格功能和页面都可以正常工作,但功能文件页面上的功能无法正常执行。
通过删除代码,我发现Object.defineProperty(exports, "__esModule", { value: true });
编译的 function-file.js 中有一行解决了问题。无论何时出现,文件中的任何函数都不会被执行。Fiddler 显示脚本在 Excel 中正确加载,没有任何警告。状态栏显示“[加载项名称] 正在处理您的 [函数名称]”。
这行代码由 Typescript Compiler 生成,在这种情况下,用于加载 Node 模块“@microsoft/office-js-helpers”。我试图修改 tsconfig.json 文件以避免生成该行,但随后“@microsoft/office-js-helpers”的导入失败。另外,Webpack 4 会在这个文件中添加 webpackBootstrap 代码拦截功能。此时,我只能避免在 function-file.ts 中进行任何导入,并在通过 Webpack 构建项目后执行“tsc”。
我的问题是:设置此项目的正确方法是什么,以便 function-file.js 不包含任何阻止其执行功能的代码?如果没有明确的答案,至少,为什么这行代码会导致其他页面正常工作的问题?
以下是我的 tsconfig.json 可以避免该行但不能加载任何模块:
"compilerOptions": {
"target": "es5",
"module": "es2015",
"moduleResolution": "node",
"lib": ["es2015", "dom"],
"typeRoots": ["node_modules/@types"]
},
我手动将编译好的function-file.js 编辑成两个版本:
Object.defineProperty(exports, "__esModule", { value: true });
(function () {
Office.initialize = function () { }
};
})();
function writeText(event) {
Office.context.document.setSelectedDataAsync('test');
event.completed();
}
VS
(function () {
Office.initialize = function () { }
};
})();
function writeText(event) {
Office.context.document.setSelectedDataAsync('test');
event.completed();
}
第一个有这个问题,而第二个没有。