Я использую накопительный пакет для объединения всего кода JS, необходимого для нашего приложения. У нас есть некоторые сторонние зависимости, которые мы используем в нашем приложении, которые также служат входом для объединения. Проблема, с которой я сталкиваюсь, может быть упрощена до кода ниже.
мой-dependency.js
(function () {
var myDependency = {};
myDependency.doSomeThing = function () {
console.log("Doing Something");
};
window['myDependency'] = myDependency;
})();
мой-code.js
window.myDependency.doSomeThing();
Поскольку у нас нет единой точки входа верхнего уровня для нашего приложения, я создал фиктивный файл верхнего уровня, который извлекает все необходимые файлы и служит в качестве входных данных для объединения. Я включил inlineDynamicImports, чтобы мы создали единый пакет для приложения.
rollupImporter.js
(async function () {
await import("./my-dependency.js");
await import("./my-code.js");
})();
Когда накопительный пакет создает пакет для этого кода, он создает переменную myDependency для хранения экспорта из my-dependency.js, который в итоге перезаписывает объект, созданный зависимостью третьей стороны, и я получаю сообщение о том, что myDependency.doSomething
не функция.
Пакет, созданный в результате объединения, выглядит следующим образом:
(async function () {
await Promise.resolve().then(function () { return myDependency; });
await Promise.resolve().then(function () { return myCode; });
})();
(function () {
var myDependency= {};
myDependency.doSomeThing = function () {
console.log("Doing Something");
};
window['myDependency'] = myDependency;
})();
var myDependency= /*#__PURE__*/Object.freeze({
});
window.myDependency.doSomeThing();
var myCode = /*#__PURE__*/Object.freeze({
});
Как я могу получить накопительный пакет, чтобы не создавать переменную для экспорта с тем же именем? У меня нет контроля над сторонней зависимостью, поэтому я не могу заставить их по-разному называть файл и их объекты.
P.S. Я столкнулся с этой проблемой с библиотекой dialog-poyfill, которую я использую, но решил упростить проблему для этого вопроса.