我正在尝试创建一个单独的AMD库(模块)文件,该文件是由许多小文件(编译为JavaScript-AMD模块的TypeScript文件)构建的。
问题是:
创建单个文件的主要原因:
我的主要问题是:
我当前的项目布局类似于以下示例:
root
|-- myLibrary
| |-- packageA
| | |-- ClassA1.ts
| | +-- ClassA2.ts
| |-- packageB
| | |-- ClassB1.ts
| | +-- ClassB2.ts
| |-- packageA.ts
| +-- packageB.ts
+-- myLibrary.ts
myLibrary.ts 的代码只是:
export import packageA = require("./packageA");
export import packageB = require("./packageB");
这只是编译成这样的AMD模块:
define(["require", "exports", "./myLibrary/packageA", "./myLibrary/packageB"], function (require, exports, packageA, packageB) {
exports.packageA = packageA;
exports.packageB = packageB;
});
包文件的结构相同。例如packageA.ts看起来像这样:
// Typescript source:
export * from "./packageA/ClassA1";
export * from "./packageA/ClassA2";
// Compiled as Javascript:
define(["require", "exports", "./packageA/ClassA1", "./packageA/ClassA2"], function (require, exports, ClassA1_1, ClassA2_1) {
function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
__export(ClassA1_1);
__export(ClassA1_2);
});
目前获得的是什么:
define("myLibrary/packageA/ClassA1",["require", "exports"], function(require, exports) {
var MyClassA1 = (function() {
// The content of the class ...
})();
exports.MyClassA1 = MyClassA1;
});
define("myLibrary/packageA/ClassA2", ...
// The other stuff ...
define(["require", "exports", "./myLibrary/packageA", "./myLibrary/packageB"], function (require, exports, packageA, packageB) {
exports.packageA = packageA;
exports.packageB = packageB;
});
我想要的是什么:
define(["require", "exports"], function(require, exports) {
//... The entire code of packageA without define or require.
var packageA = ...;
//...
export.packageA = packageA;
export.packageB = packageB;
});
答案 0 :(得分:2)
他们已经在their roadmap中捆绑了一个模块。
由于我们在撰写本文时处于TypeScript 1.6,并且他们说它将在1.7中实现,因此您需要等待vnext,这应该很快就会发布。
答案 1 :(得分:1)
目前,您需要使用其他类型的AMD优化器。特别是,您可以使用r.js,这是RequireJS项目的一部分。它将检查您的AMD模块并将它们发送到不同的层。
目前,如果您将TypeScript项目配置为使用UMD,则r.js优化器无法识别properly your UMD modules,因此唯一的选择是针对您的项目定位AMD。
我认为即使在TypeScript 1.7+中添加某种连接时,您仍可能希望使用功能更丰富的工具,例如r.js,因为它可以更好地优化和控制AMD应用程序,因为层和依赖关系在复杂项目中通常很复杂。
答案 2 :(得分:1)
与--module amd或--module一起指定--outFile 系统会将编译中的所有模块连接成一个单独的 包含多个模块闭包的输出文件。
请参阅outfile + amd。