具有回退全局的UMD语法

时间:2016-04-29 09:54:14

标签: build module typescript

我的设置

我正在编译我的.ts模块' FooModule'到Visual Studio 2015中的UMD module。我想扩展这个UMD语法,这样当没有模块加载系统时,模块将作为回退注入到全局对象中,我想自动执行此任务作为构建过程的一部分。

UMD语法

使用UMD语法(通用模块定义语法)编译TypeScript模块时,会发出与RequireJS和NodeJS兼容的模块:

FOO-module.ts

export class Foo {
    // ...
}

...编译成:

FOO-module.js

(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 Foo = (function () {
        function Foo() {
        }
        return Foo;
    }());
    exports.Foo = Foo;
});

回退到全球注入

但是,作为UMD的 Universal 部分的一部分,我希望我的模块在没有任何模块加载系统的情况下也可以使用。 我的模块没有依赖关系。

这通常是通过添加第三个案例作为后备来完成的,当时RequireJS和NodeJS模块系统都不存在,这将有效地注入全局对象。对于foo-module,这看起来像:

(function (global, 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);
    } else {
        // *****************************
        factory(null, global.FooModule || (global.FooModule = {})); // <- This part.
        // *****************************
    }
})(this, function (require, exports) {
    "use strict";
    var Foo = (function () {
        function Foo() {
        }
        return Foo;
    }());

    // In browsers, this means 'window.FooModule.Foo = Foo'.
    exports.Foo = Foo;
});

我相信在没有外部依赖关系的情况下(假设没有两个具有相同名称的模块已经以这种方式加载)就足够了。

我知道我可以在每次构建后手动重写,但如何在Visual Studio(2015)的构建过程中自动执行此任务(或具有相同结果的内容)? < / p>

1 个答案:

答案 0 :(得分:1)

  

我知道我可以在每次构建后手动重写,但是如何在Visual Studio(2015)的构建过程中自动执行此任务(或具有相同结果的内容)?

您必须自己创建。

更多

UMD有一些变体:https://github.com/umdjs/umd您想要的是回退浏览器全球:https://github.com/umdjs/umd/blob/master/templates/returnExports.js

这不是TypeScript中的版本,因为 global 几乎是 no module system

相关问题