我的设置
我正在将我的.ts模块“foomodule”编译为visual studio 2015中的UMD module。我想扩展这个UMD语法,以便当没有模块加载系统时,模块将被注入到全局对象中作为回退,并且我想将这个任务自动化为构建过程的一部分。
umd语法
使用umd语法(通用模块定义语法)编译typescript模块时,会发出同时兼容requirejs和nodejs的模块:
FOO模块.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通用部分的一部分,我希望我的模块可以在没有任何模块加载系统的情况下使用。我的模块没有依赖项。
这通常是在不需要RealJS和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;
});

我相信,在没有外部依赖关系的情况下,这将是足够的(假设没有两个具有相同名称的模块以这种方式加载)。
我知道在每次构建之后我都可以手动重写,但是如何在VisualStudio(2015)中作为一个构建过程的一部分来自动化这个任务(或者相同的结果)?

最佳答案

我知道我可以在每次构建之后手动重写,但是我如何在visual studio(2015)中将此任务(或具有相同结果的任务)作为构建过程的一部分自动化呢?
你必须自己创造这个。
更多
umd有几个变体:https://github.com/umdjs/umd您需要的是回退浏览器全局:https://github.com/umdjs/umd/blob/master/templates/returnExports.js
这不是typescript中的版本,因为global几乎没有模块系统。

10-06 11:59