我的设置
我正在将我的.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几乎没有模块系统。