Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Build 具有回退全局的UMD语法 我的设置_Build_Module_Typescript - Fatal编程技术网

Build 具有回退全局的UMD语法 我的设置

Build 具有回退全局的UMD语法 我的设置,build,module,typescript,Build,Module,Typescript,我正在Visual Studio 2015中将我的.ts模块“FooModule”编译成一个。我想扩展这个UMD语法,以便在没有模块加载系统的情况下,将模块作为回退注入全局对象,并且我想将此任务作为构建过程的一部分进行自动化 UMD语法 使用UMD语法(通用模块定义语法)编译TypeScript模块时,会发出与RequireJS和NodeJS兼容的模块: foo模块.ts export class Foo { // ... } (function (factory) { if

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


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

foo模块.ts

export class Foo {
    // ...
}
(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;
});
。。。汇编成:

foo module.js

export class Foo {
    // ...
}
(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模块
,这看起来像:

(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;
});
(功能(全局,工厂){
if(typeof module=='object'&&typeof module.exports=='object'){
var v=工厂(需要,导出);if(v!==未定义)module.exports=v;
}else if(typeof define==='function'&&define.amd){
定义([“要求”、“出口”],工厂);
}否则{
// *****************************
工厂(null,global.FooModule | |(global.FooModule={}));//
我知道我可以在每次构建之后手动重写,但如何在Visual Studio(2015)中将此任务(或具有相同结果的任务)作为构建过程的一部分进行自动化

你必须自己创造这个

更多 UMD有几个变体:您需要的是回退浏览器全局:


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

我发现有点可行的解决方案是创建global-fake-require和define函数(当它们还不存在时),这些函数实际上只是回退全局功能的包装。