SystemJS / TypeScript,如何将多个类组合成一个模块

时间:2016-06-19 20:17:20

标签: angularjs typescript systemjs

前一段时间我在尝试requireJS here时问了一个类似的问题,我不知道我做了什么然后是正确与否,但我无法使用systemJS。

我尝试创建单个模块文件,其中包含针对给定模块的多个类的导出。 这是示例模块(称为module1)。

import {Module1ComponentA} from "./a.component";
import {Module1ComponentB} from "./b.component";

export * from "./a.component";
export * from "./b.component";

angular.module("module1", [])
    .component("module1ComponentA", new Module1ComponentA())
    .component("module1ComponentB", new Module1ComponentB())
;

然后我可以使用

引用任一组件
import {Module1ComponentA} from './module1/module1

问题是我在加载应用时遇到异常。

Error: TypeError: i.setters[l] is not a function
    at exportStar_1 (http://127.0.0.1:8080/output/module1/module1.js:10:9)
    at Array.setters.b_component_1 (http://127.0.0.1:8080/output/module1/module1.js:16:17)
    at execute (http://127.0.0.1:8080/output/module1/a.component.js:14:13)
Error loading http://127.0.0.1:8080/output/boot.js

如果我没有包含' export'语句但引用源文件的导入,然后加载。

这是SystemJS配置

    <script>
    System.config({
        packages: {
            output: {
                format: 'register',
                defaultExtension: 'js'
            }
        },
        map: {
            app: 'output/boot.js',
            module1: 'output/module1/module1.js'
        },
        meta: {
            'app': { deps: [ 'module1' ] },
            '*.js': {
                scriptLoad: true,
            }
        }
    });
    System.import('output/boot.js')
          .then(null, console.error.bind(console));
</script>

这是模块生成的js文件

System.register(["./a.component", "./b.component"], function(exports_1, context_1) {
"use strict";
var __moduleName = context_1 && context_1.id;
var a_component_1, b_component_1;
function exportStar_1(m) {
    var exports = {};
    for(var n in m) {
        if (n !== "default") exports[n] = m[n];
    }
    exports_1(exports);
}
return {
    setters:[
        function (a_component_1_1) {
            a_component_1 = a_component_1_1;
            exportStar_1(a_component_1_1);
        },
        function (b_component_1_1) {
            b_component_1 = b_component_1_1;
            exportStar_1(b_component_1_1);
        }],
    execute: function() {
        angular.module("module1", [])
            .component("module1ComponentA", new a_component_1.Module1ComponentA())
            .component("module1ComponentB", new b_component_1.Module1ComponentB());
    }
}

}); //#sourceMappingURL = module1.js.map

有关如何执行此操作的任何建议吗?

0 个答案:

没有答案