1

私は 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/'ただし、登録パスからすべてを手動で削除すると、アプリは動作を開始します (systemjs.config.jsファイル内の「dist」にマップされます)。

'wwwroot'フォルダーの追加を省略したり、正しく解決するには、ビルダー (またはシステム構成ファイル) をどのように構成すればよいですか? アドバイスをいただければ幸いです。

ありがとうございました!

4

1 に答える 1

1

やっと見つけた!次のことが必要です。

  • ルート ベース URL をビルダー インスタンスに追加します。new systemjsBuilder('wwwroot', 'wwwroot/dist/configs/systemjs.config.js');
  • に変更.bundle('wwwroot/dist/**/*',....bundle('[dist/**/*]', ...ます (角括弧は依存関係を削除します)
  • systemjs.config.jsファイルで、アプリ パッケージの形式を から に変更registerするcjs(私の JS モジュールは CommonJS 形式です) か、形式を完全に削除してモジュールの自動検出を有効にします。
于 2016-10-19T19:09:32.177 に答える