如何将命名空间的 JS 代码迁移到 CommonJS 模块?

问题描述

我正在迁移 MPA(多页应用程序)的 3rd 方扩展的遗留 JS 代码库:尽量简单

  • 原样:伪模块由main.js加载的全局空间中的IIFE(立即调用函数表达式)组成,当然是为了避免名称冲突和导出模块变量,这些模块分配属性到(全局/窗口)命名空间对象
  • 应该是:Commonjs 模块,可以被遗留的 namespaced 第一方核心 js 使用

主要问题:如何创建一个“现代”的 Commonjs 模块,仍然可以在“旧世界”中使用?

    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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...