如何使 TypeScript 使用 AMD 模块生成的代码真正执行?
How can I make code generated by TypeScript using AMD modules, actually execute?
我刚开始使用 TypeScript,我制作了 2 个文件,lib.ts 和 main.ts,并在编译期间选择了 AMD 模块。编译器生成一个包含定义的文件,但它实际上并不调用任何函数来执行。 main.ts 文件的内容只是包装在一个模块中。
以下是文件:
lib.ts
export namespace Library {
export class Write {
constructor() {
console.log("hello world");
}
}
}
main.ts
import {Library} from "./lib";
new Library.Write();
编译命令:
tsc main.ts --outFile out.js --module amd
out.js
define("lib", ["require", "exports"], function (require, exports) {
"use strict";
var Library;
(function (Library) {
var Write = (function () {
function Write() {
console.log("hello world");
}
return Write;
}());
Library.Write = Write;
})(Library = exports.Library || (exports.Library = {}));
});
define("main", ["require", "exports", "lib"], function (require, exports, lib_1) {
"use strict";
new lib_1.Library.Write();
});
如何让编译器实际生成可执行的代码?文档没有帮助。
不应使用选项 --outFile
。 AMD 格式必须在浏览器中与异步加载程序 RequireJS 一起使用。 RequireJS 将根据需要加载多个生成的 JavaScript 文件。
此外,您需要在浏览器中加载 RequireJS 运行时。
比照the documentation.
注意:关于代码export namespace
,不建议混合命名空间和模块,参见this answer。
我刚开始使用 TypeScript,我制作了 2 个文件,lib.ts 和 main.ts,并在编译期间选择了 AMD 模块。编译器生成一个包含定义的文件,但它实际上并不调用任何函数来执行。 main.ts 文件的内容只是包装在一个模块中。 以下是文件:
lib.ts
export namespace Library {
export class Write {
constructor() {
console.log("hello world");
}
}
}
main.ts
import {Library} from "./lib";
new Library.Write();
编译命令:
tsc main.ts --outFile out.js --module amd
out.js
define("lib", ["require", "exports"], function (require, exports) {
"use strict";
var Library;
(function (Library) {
var Write = (function () {
function Write() {
console.log("hello world");
}
return Write;
}());
Library.Write = Write;
})(Library = exports.Library || (exports.Library = {}));
});
define("main", ["require", "exports", "lib"], function (require, exports, lib_1) {
"use strict";
new lib_1.Library.Write();
});
如何让编译器实际生成可执行的代码?文档没有帮助。
不应使用选项 --outFile
。 AMD 格式必须在浏览器中与异步加载程序 RequireJS 一起使用。 RequireJS 将根据需要加载多个生成的 JavaScript 文件。
此外,您需要在浏览器中加载 RequireJS 运行时。 比照the documentation.
注意:关于代码export namespace
,不建议混合命名空间和模块,参见this answer。