问题描述
我正在迁移 MPA(多页应用程序)的 3rd 方扩展的遗留 JS 代码库:尽量简单
- 原样:伪模块由main.js加载的全局空间中的IIFE(立即调用的函数表达式)组成,当然是为了避免名称冲突和导出模块变量,这些模块分配属性到(全局/窗口)命名空间对象
- 应该是:Commonjs 模块,可以被遗留的 namespaced 第一方核心 js 使用
主要问题:如何创建一个“现代”的 Commonjs 模块,仍然可以在“旧世界”中使用?
- vendor.js
window.vendorNameSpace = {};
(function() {
var moduleVar = 1;
function someMagic() { ... }
vendorNameSpace.someMagic = someMagic;
})();
- 3rdParty.js
let moduleVar = 1;
function someMagic() { ... }
var exports = exports || {}; // workaround: 1st party does not kNow exports / module.exports
exports.someMagic = someMagic;
// 1st party does not use require.js,// that's why it refers to other module functions by namespace.function in the global scope
window.ThirdPartyNameSpace = {
someMagic: someMagic
};
Web 应用程序通过自己的加载器将 2 个 JS 文件加载到全局空间中,这就是问题开始的地方...当然,我不想核心 hack ASPX 以通过 { {1}} 个元素。
将 3rdParty.js 转译或构建为的最简单方法是什么
- 可由第一方 Web 应用程序导入到全局范围内?
- 尽可能简单,不要有太多的垫片/装饰/代码噪音
注意:使用当前结构,我可以使用 jasmine-node 测试我的 3rdParty.js
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)