关于angular:SystemJS构建器:捆绑应用程序时正确解析模块注册路径

SystemJS builder: Resolve module registration path correctly when bundling the app

我正在使用Angular2教程项目https://angular.io/docs/ts/latest/tutorial/并使用SystemJS Builder进行应用捆绑。但是,我正在为生成的捆绑包代码注册模块中的路径苦苦挣扎。
这是我的文件夹结构:

1
2
3
4
5
6
7
8
9
10
11
12
wwwroot
|-dist
  |-configs
  |  |-systemjs.config.js
  |    
  |-js
  | |-bundle.js //generated output bundle
  |
  |-main.js
  |-app.module.js
  |-app.component.js
......................

systemjs.config.js文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
(function (global) {
    System.config({
        baseURL:'wwwroot',
        paths: {
            // paths serve as alias
            'res:': 'lib/',
            'ng:': 'lib/@angular/'
        },
        // map tells the System loader where to look for things
        map: {
            // !!! the app is within the dist folder !!!
            'app': 'dist',
            // angular bundles
            '@angular/core': 'ng:core/bundles/core.umd.js',
            // other Angular 2 stuff...
            '@angular/upgrade': 'ng:upgrade/bundles/upgrade.umd.js',
            // other libraries
            'rxjs': 'res:rxjs',
            'angular2-in-memory-web-api': 'res:angular2-in-memory-web-api',
        },      

        // packages tells the System loader how to load when no filename and/or no extension
        packages: {
            app: {
                //app entry point
                main: './main.js',
                format: 'register',
                defaultExtension: 'js'    
            },
            rxjs: {
                defaultExtension: 'js'
            },
            'angular2-in-memory-web-api': {
                main: './index.js',
                defaultExtension: 'js'
            }
        }
    });
})(this);

Gulp任务:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var systemjsBuilder = require('systemjs-builder');

gulp.task('bundle-app', function () {

var builder = new systemjsBuilder('', 'wwwroot/dist/configs/systemjs.config.js');

return builder
    .bundle('wwwroot/dist/**/*', PATH.root + PATH.dist + '/js/bundle.min.js', {
        minify: false,
        mangle: true
    })
    .then(function () {
        console.log('Build complete');
    })
    .catch(function (err) {
        console.log('Build error');
        console.log(err);
    });

});

在生成的捆绑文件中,所有通过System.registerDynamic('wwwroot/dist/main.js',...)注册的模块均无效。
但是,如果我从注册路径中手动删除所有'wwwroot/',则该应用程序开始运行(它已映射到systemjs.config.js文件中的\\'dist \\')。

我应该如何配置构建器(或系统配置文件)以省略'wwwroot'文件夹的添加或正确解析?
任何建议将不胜感激。

谢谢!


终于找到了!
只需:

  • 将根基础URL添加到构建器实例中,例如new systemjsBuilder('wwwroot', 'wwwroot/dist/configs/systemjs.config.js');
  • .bundle('wwwroot/dist/**/*',...更改为.bundle('[dist/**/*]', ...(方括号删除依赖项)
  • systemjs.config.js文件中,将应用程序包格式从register更改为cjs(我的JS模块为CommonJS格式),或者完全删除该格式以启用模块自动检测。