创建可在浏览器和nodejs中使用的打字稿库

时间:2016-11-22 17:38:28

标签: javascript node.js typescript browser module

我想创建一个可以在浏览器和nodejs中使用的库。为了论证,让我们说这是我的库:​​

export default class MyClass {
    public getString(): string {
        return "Message";
    }
}

目前浏览器不支持ES2015模块,我不希望在浏览器中依赖requirejs或任何其他模块加载器 - 我希望通过使用包含生成的.js文件来使用此库。 script标记。感觉我想要的东西可以通过使用内部模块来实现(我不想污染全局命名空间)。 但是,当我将代码包装在namespace / module中时,我很难将其编译为commonjs模块。

实现我想要的正确方法是什么?或者,可能是,我完全脱离了轨道这里是打字稿和javascript noob?

1 个答案:

答案 0 :(得分:6)

我认为你需要的是UMDtsconfig.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标记添加,您需要模块捆绑,例如WebpackBrowserifyRollup。这些将使用全局导出生成UMD定义,因此库的主文件的默认导出将作为全局范围内的某个变量提供。