如何使用System JS Builder捆绑Angular 2?

时间:2016-06-05 19:28:55

标签: angular bundling-and-minification systemjs

我目前正在使用带有System JS Builder的System JS来捆绑我的应用程序,它的资产以及它引用的库。我的问题是我可以捆绑在index.html中明确引用的库,例如:

<script src="node_modules/es6-shim/es6-shim.min.js"></script>
<script src="node_modules/zone.js/dist/zone.js"></script>
<script src="node_modules/reflect-metadata/Reflect.js"></script>
<script src="node_modules/systemjs/dist/system.src.js"></script>

但是,我无法弄清楚如何捆绑Angular 2本身,或者至少是Angular 2所需的模块,因为它们实际上并未在HTML中引用。怎么办呢?

2 个答案:

答案 0 :(得分:19)

使用systemjs-builder,您可以将Angular 2与您的应用代码捆绑在一起,并将其他库分开捆绑。

我将直接在HTML中引用的任何库捆绑到vendors.min.js中,并将通过我的system.config.js和app代码引用的任何库引入app.min.js.在此example中,您可以看到“英雄之旅”中的所有依赖项都加载到&lt; 10个网络请求(source code)中的页面中。

// Bundle dependencies into vendors file
gulp.task('bundle:libs', function () {
    return gulp.src([
        'node_modules/jquery/dist/jquery.min.js',
        'node_modules/bootstrap/dist/js/bootstrap.min.js',
        'node_modules/semantic-ui/dist/semantic.min.js',
        'node_modules/es6-shim/es6-shim.min.js',
        'node_modules/es6-promise/dist/es6-promise.min.js',
        'node_modules/systemjs/dist/system.src.js',
        'system.config.js',
      ])
        .pipe(concat('vendors.min.js'))
        .pipe(uglify())
        .pipe(gulp.dest('public/lib/js'));
});

// Compile TypeScript to JS
gulp.task('compile:ts', function () {
  return gulp
    .src([
        "src/**/*.ts",
        "typings/*.d.ts"
    ])
    .pipe(sourcemaps.init())
    .pipe(tsc({
        "module": "system",
        "moduleResolution": "node",
        "outDir": "public/dist/js",
        "target": "ES5"
    }))
    .pipe(sourcemaps.write('.'))
    .pipe(gulp.dest('public/dist'));
});

// Generate systemjs-based builds
gulp.task('bundle:js', function() {
  var builder = new sysBuilder('public', './system.config.js');
  return builder.buildStatic('app', 'public/dist/js/app.min.js');
});

// Minify JS bundle
gulp.task('minify:js', function() {
  return gulp
    .src('public/dist/js/app.min.js')
    .pipe(uglify())
    .pipe(gulp.dest('public/dist/js'));
});

gulp.task('scripts', ['compile:ts', 'bundle:js', 'minify:js']);

答案 1 :(得分:2)

您可以使用像WebpackRollup这样的捆绑器(我的偏好,因为它会发生树木震动)。

Angular团队似乎正在围绕 Rollup 及时完成一些很棒的工具,以便完整发布。今年ng-conf的第2天主题演讲讨论并演示了脱机编译器Start watching this在25:30。