С некоторыми советами от моего коллеги, который работал на JavaScript во время ланча, я добился некоторого прогресса в вызове функций в function-file.ts. Я бы хотел, чтобы мой путь к этой работе помог другим людям, страдающим от той же боли, что и я, и до сих пор в этом проекте.
Прежде всего, как только я получил, что функция file.js работает должным образом, я заметил, что есть две разные ситуации, когда функция не работает:
строка состояния показывает, что «[имя надстройки] работает с вашим [именем функции]» и остается с ним, я считаю, что функция вызывается, но не может быть достигнута строка event.completed()
;
строка состояния мигает тем же сообщением и становится пустой, что указывает на то, что функция даже не была найдена.
Пожалуйста, исправьте меня, если есть лучший способ диагностики этого файла.
Оригинальная сгенерированная Yeoman конфигурация Webpack для function-file.html выглядит примерно так:
new HtmlWebpackPlugin({
title: 'demo',
filename: 'function-file/function-file.html',
template: '../function-file/function-file.html',
chunks: ['function-file']
}),
Чтобы использовать какой-либо модуль, запись «vendor» (не требуется для моих пользовательских модулей, но требуется для «office-js-helpers»?) И запись «polyfills» также должны быть включены в чанки.
Моя конфигурация Webpack 4:
new HtmlWebpackPlugin({
title: "demo",
filename: "function-file/function-file.html",
template: "../function-file/function-file.html",
chunks: ["babel-polyfill", "function-file/function-file"]
}),
Последний шаг - убедиться, что функции, объявленные в function-file.ts, можно найти: попросить Webpack экспортировать глобальные функции в function-file.ts, в чем я до сих пор не уверен, взламываю ли я разработку Typescript или все нормально.
Пример функции-file.ts:
import * as OfficeHelpers from '@microsoft/office-js-helpers';
(() => {
Office.initialize = () => {};
})();
declare global {
namespace NodeJS {
interface Global {
writeText: (event: Office.AddinCommands.Event) => void;
}
}
}
global.writeText = (event: Office.AddinCommands.Event) => {
Office.context.document.setSelectedDataAsync('test');
event.completed();
};
Обратите внимание: даже office-js-helpers импортированы, некоторые функции все еще не работают. Я проверил свои пользовательские модули, они работают правильно.
Мне бы очень хотелось, чтобы в размещенном на NodeJS проекте React & Typescript для веб-надстройки Office было несколько примеров функциональных файлов, поскольку детальная конфигурация действительно отличается от обычного проекта NodeJS + JavaScript.