Kok*_*oko 4 typescript systemjs
我正在使用 typescript 编译器将我的模块捆绑到一个 main.js 文件中,使用 tsconfig.json 中的这些设置:
"module": "system",
"out": "docs/js/main.js"
Run Code Online (Sandbox Code Playgroud)
这是有效的,所以根据SystemJS 文档,我只需要在我的 HTML 中包含 SystemJS 生产文件并使用这些标签启动应用程序:
<script src="js/system.js"></script>
<script>
SystemJS.import('js/main.js');
</script>
Run Code Online (Sandbox Code Playgroud)
我的应用程序:
import { Message } from "./message";
export class App {
constructor() {
let demomessage = new Message("hello");
}
}
export class Message {
constructor(str:string) {
console.log(str);
}
}
Run Code Online (Sandbox Code Playgroud)
这会在 main.js 中生成以下 javascript 代码:
System.register("message", ...) {
// message code here
});
System.register("app", ...) {
// app code here
});
Run Code Online (Sandbox Code Playgroud)
我缺少的部分(微软总是缺乏的 Typescript-documentation也没有解释)是如何实际启动应用程序...... SystemJS 如何知道哪个类是起点?即使我只是将 console.log 放在我的应用程序中它也不会执行....
编辑
我发现使用 system.js 而不是 system-production.js 至少可以启动这个过程。经过大量摆弄后,我让我的应用程序从以下代码开始,但它看起来很奇怪和丑陋。这是它应该如何工作???
<script src="js/system.js"></script>
<script>
// get the anonymous scope
System.import('js/main.js')
.then(function() {
// now we can get to the app and make a new instance
System.import('app').then(function(m){
let app = new m.App();
})
});
</script>
Run Code Online (Sandbox Code Playgroud)
经过一番摸索,我发现答案比预期的要简单:只需先将包作为常规 .js 文件加载,然后您就可以直接导入应用程序:
<script src="js/system.js"></script>
<script src="js/main.js"></script>
<script>
System.import('app').then(function(module) {
let a = new module.App();
});
</script>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1297 次 |
| 最近记录: |