如何从包中调用命名模块
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.
所以我需要做的就是告诉 systemjs
将 init
模块注册到我的包中,它将下载包并执行 init
模块中的任何内容。
我有一个使用 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.
所以我需要做的就是告诉 systemjs
将 init
模块注册到我的包中,它将下载包并执行 init
模块中的任何内容。