如何从包中调用命名模块

How to call a named module from a bundle

我有一个使用 ASP.NET 5 和 TypeScript 的项目。基本上这是我的 wwwroot 文件夹

-wwwroot
|-app
||-person.js
||-employee.js
||-init.js
|-js
||-libraries.js    // Contains: systemjs, ...etc
||-app.bundle.js

person.js 是一个导出 class Person 的 es6 模块。

employee.js 导入 person.js 并导出 class Employee

init.js 只是导入 employee.js,创建一个新的 Employee 对象并安慰他的名字。

//init.js
import { Employee } from "./employee";

var p = new Employee();
console.log(p.name);

现在我使用 systemjs-builder 将这三个文件捆绑到 app.bundle.js 中,它位于 js 文件夹中,它产生了三个名为 System.register 的调用:

System.register("wwwroot/app/person.js",...
System.register("wwwroot/app/employee.js",...
System.register("wwwroot/app/init.js"...

在我的 index.cshtml 视图文件中,我有这些脚本标签:

<script type="text/javascript" src="./js/libraries.js"></script>

<!-- 2. Configure SystemJS -->
<script type="text/javascript">
    System.config({
        packages: {
            js: {
                format: 'register',
                defaultExtension: 'js'
            }
        }
    });
    System.import('js/app.bundle')
        .then(null, console.error.bind(console));
</script>

显然因为我已经命名模块,所以 init.js 中的任何内容都不会被调用。

所以我的问题是,如何调用命名的 System.register 调用?

注意:我是 es6 模块的新手,所以这是一个让想法正确的测试项目。

从这个wiki page,我用这个解决了我的问题:

<script type="text/javascript">
    System.config({
        bundles: {
            'app.bundle.js': ['wwwroot/app/init']
        },
        packages: {
            wwwroot: {
                format: 'register',
                defaultExtension: 'js'
            }
        }
    });
    System.import('wwwroot/app/init')
        .then(null, console.error.bind(console));
</script>

说明:

The bundle extension will automatically download a bundle as soon as an attempt to import any module in that bundle is made.

所以我需要做的就是告诉 systemjsinit 模块注册到我的包中,它将下载包并执行 init 模块中的任何内容。