我想创建一个可以在浏览器和 Nodejs 中使用的库。为了便于讨论,我们假设这是我的图书馆:
export default class MyClass {
public getString(): string {
return "Message";
}
}
截至目前,浏览器不支持 ES2015 模块,我不想在浏览器中依赖 requirejs 或任何其他模块加载器 - 我希望仅通过使用生成的 .js 文件来使用该库script
标签。感觉我想要的可以通过使用内部模块来实现(我不想污染全局命名空间)。
但是当我将代码包装在namespace
/module
我很难将其编译为 commonjs 模块。
实现我想要的目标的正确方法是什么?或者,也许,作为一个打字稿和 JavaScript 菜鸟,我完全脱离了轨道?
我想你需要的是UMD. With tsconfig.json
含有
{
"compilerOptions": {
"module": "umd"
},
}
生成的 JavaScript 将如下所示:
(function (factory) {
if (typeof module === 'object' && typeof module.exports === 'object') {
var v = factory(require, exports); if (v !== undefined) module.exports = v;
}
else if (typeof define === 'function' && define.amd) {
define(["require", "exports"], factory);
}
})(function (require, exports) {
"use strict";
var MyClass = (function () {
function MyClass() {
}
MyClass.prototype.getString = function () {
return "Message";
};
return MyClass;
}());
exports.__esModule = true;
exports["default"] = MyClass;
});
它适用于节点(CommonJS)以及浏览器(CommonJS、AMD)。允许您的库的用户通过以下方式将其包含在内:script
标签,你需要模块捆绑器 like Webpack, 浏览器化 or Rollup。这些将生成具有全局导出的 UMD 定义,因此库的主文件的默认导出将可作为全局范围内的某个变量使用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)