通过-outFile的Typescript包CommonJs模块

时间:2019-05-07 20:36:54

标签: javascript typescript module bundle commonjs

通过Typescript(版本3.1.2)使用JS模块时。我在tsconfig.json文件中注意到,不喜欢将-module: "CommonJs"-outFile: "./bundle.js"一起使用。

TS是否有理由不捆绑CommonJs模块?

成功地能够将-module: "amd"设置为一个js文件。下面的示例结合了main.tsmodule1.ts并能够在生产中使用require.js作为模块加载器的过程。

AMD bundle.js

//module1.ts
define("module1", ["require", "exports"], function (require, exports) {
    "use strict";
    Object.defineProperty(exports, "__esModule", { value: true });
    function Sum(a, b) {
        return a + b;
    }
    exports.Sum = Sum;
});
//main.ts with dependency to module1.ts
define("main", ["require", "exports", "module1"], function (require, exports, module1_1) {
    "use strict";
    Object.defineProperty(exports, "__esModule", { value: true });
    console.log(module1_1.Sum(4, 6));
});

了解捆扎机之类的东西; WebPack,rollup.js等可以结合浏览器的commonjs模块。我的困境是,我公司的网络安全将开放NPM到互联网。最近才获得NodeJ的批准(但这主要是因为Visual Studio依赖它)。

因此,经过大量的尝试和搜索,终于看到了CommonJs模块如何在浏览器中捆绑和使用。 下面的示例将等同于上面的相同示例。经过测试,效果很好!!

CommonJs bundle.js

(function (f) {if (typeof exports === "object" && typeof module !== "undefined") {module.exports = f()}else if (typeof define === "function" && define.amd) {define([], f)}else {var g;if (typeof window !== "undefined") {g = window}else if (typeof global !== "undefined") {g = global}else if (typeof self !== "undefined") {g = self}else {g = this}g.Main = f()}
})(function () {var define, module, exports;return (function e(t, n, r) {function s(o, u) {if (!n[o]) {if (!t[o]) {var a = typeof require == "function" && require;if (!u && a) return a(o, !0);if (i) return i(o, !0);var f = new Error("Cannot find module '" + o + "'");throw f.code = "MODULE_NOT_FOUND", f}var l = n[o] = { exports: {} };t[o][0].call(l.exports, function (e) {var n = t[o][1][e];return s(n ? n : e)}, l, l.exports, e, t, n, r)}return n[o].exports}var i = typeof require == "function" && require;for (var o = 0; o < r.length; o++)s(r[o]);return s})({
    //START Module Wrapper

    //module.ts
    1: [function (require, module, exports) {
      "use strict";
      Object.defineProperty(exports, "__esModule", { value: true });
      function Sum(a, b) {
          return a + b;
      }
      exports.Sum = Sum;
    }, {}],

    //main.ts with dependency to module1.ts
    2: [function (require, module, exports) {
      "use strict";
      var Sum = require("module1").Sum;
      console.log(Sum(4, 6));
    }, {"module1": 1}]

    //END Module Wrapper
  }, {}, [2])(2)
});

在我跳入兔子洞之前,请考虑编写自己的捆绑程序(不依赖NPM)。想知道为什么微软不包括这个吗?

那么,有没有令人信服的理由为什么Typescript无法捆绑CommonJs文件?

0 个答案:

没有答案