Сборщик SystemJS: правильное определение пути регистрации модуля при объединении приложения

Я играю с учебным проектом Angular2 https://angular.io/docs/ts/latest/tutorial/ и использую SystemJS Builder для объединения приложений. Однако я борюсь с путями в сгенерированных модулях регистрации кода пакета. Вот моя структура папок:

wwwroot
|-dist
  |-configs
  |  |-systemjs.config.js
  |    
  |-js
  | |-bundle.js //generated output bundle
  |
  |-main.js
  |-app.module.js
  |-app.component.js
......................

Файл systemjs.config.js:

(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);

Задание глотка:

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/' из путей регистрации, приложение начинает работать (оно отображается на "dist" в systemjs.config.js файл).

Как мне настроить компоновщик (или системный конфигурационный файл), чтобы пропустить 'wwwroot' добавление папки или ее правильное разрешение? Любой совет будет оценен.

Спасибо!

1 ответ

Наконец-то нашел! Просто нужно:

  • добавить корневой базовый URL к экземпляру компоновщика, например new systemjsBuilder('wwwroot', 'wwwroot/dist/configs/systemjs.config.js');
  • менять .bundle('wwwroot/dist/**/*',... в .bundle('[dist/**/*]', ... (квадратные скобки убирают зависимости)
  • в systemjs.config.js файл либо изменить формат пакета приложения с register в cjs (мои JS-модули имеют формат CommonJS) или полностью удалите формат, чтобы включить автоопределение модулей.
Другие вопросы по тегам