我正在尝试使模块代码工作。到目前为止,我有以下代码:
// third_party/test/Test.ts
export function test():void
{
console.log("QWERTY");
}
// Main.ts
// import {test} from "./third_party/test/Test"
require([], function () {
console.log("Loaded");
}
// index.html
<!DOCTYPE html>
<html lang="en">
<head>
<script data-main="build/library" type="text/javascript" src="scripts/third_party/require/require.js"></script>
</head>
</html>
// tsconfig.json
{
"compilerOptions": {
"target": "es5",
"module": "amd",
"sourceMap": true,
"outFile": "build/library.js"
}
}
请注意Main.ts
中注释的import
语句。该代码按预期工作 - 我可以看到输出消息。但是,一旦我在 Main.ts
中取消 import
,我什么都看不到。没有错误或警告。
由于我使用的是outFile
编译器选项,所以我只有一个js
文件。
您的编译产生的文件包含这样定义的模块:
define("third_party/test/Test", ["require", "exports"], function (require, exports) {
// ...
define("Main", ["require", "exports"], function (require, exports) {
// ...
请注意define
的第一个参数。这些是您的模块所在的名称。您的data-main
请求一个名为build/library
的模块。您的捆绑包中没有此名称。
您需要要求Requirejs加载Main
。这是一种简单的方法:
<!DOCTYPE html>
<html lang="en">
<head>
<script type="text/javascript" src="node_modules/requirejs/require.js"></script>
<script>
require.config({
// All modules are under the "build" path.
baseUrl: "build",
// The "library" bundle contains the module "Main" so when
// "Main" is requested, look for it in "library".
bundles: {
"library": ["Main"],
},
});
require(["Main"]);
</script>
</head>
</html>