首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带回退全局的UMD语法

带回退全局的UMD语法
EN

Stack Overflow用户
提问于 2016-04-29 09:54:13
回答 1查看 850关注 0票数 3

我的圈套

我正在Visual 2015中将我的.ts模块'FooModule‘编译成一个UMD模块。我想扩展这个UMD语法,以便在没有模块加载系统的情况下,将模块作为后盾注入全局对象,并且我希望将此任务自动化作为构建过程的一部分。

UMD语法

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

foo-module.ts

代码语言:javascript
复制
export class Foo {
    // ...
}

..。汇编成:

foo-module.js

代码语言: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 Foo = (function () {
        function Foo() {
        }
        return Foo;
    }());
    exports.Foo = Foo;
});

回退到全局注入

然而,作为UMD通用部分的一部分,我希望我的模块可以在没有任何模块加载系统的情况下使用。我的模块没有依赖项.

这通常是通过添加第三种情况来完成的,作为RequireJS和NodeJS模块系统都不存在时的后盾,这将有效地注入全局对象。对于foo-module,如下所示:

代码语言:javascript
复制
(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 (2015)中自动完成这个任务(或具有相同结果的内容)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-02 04:39:33

我知道我可以在每次构建之后手动重写,但是我如何在Visual (2015)中自动化这个任务(或具有相同结果的东西)作为构建过程的一部分?

你必须自己创造这个。

更多

UMD:https://github.com/umdjs/umd有几种变体,您想要的是备用浏览器全局:https://github.com/umdjs/umd/blob/master/templates/returnExports.js

这不是TypeScript中的版本,因为global几乎没有模块系统。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36935177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档