通过Typescript(版本3.1.2)使用JS模块时。我在tsconfig.json文件中注意到,不喜欢将-module: "CommonJs"
和-outFile: "./bundle.js"
一起使用。
TS是否有理由不捆绑CommonJs模块?
成功地能够将-module: "amd"
设置为一个js文件。下面的示例结合了main.ts
和module1.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文件?