Given your setup, you should use systemjs-builder to associate your application with the product. It accepts your SystemJS configuration, so no further configuration is required. It combines your modules into a single file, with parameters to minimize, cripple, etc.
This makes the "es6 module" way, improving the use of our module loader instead of copying / pasting modules, as it would be in a traditional javascript (es5) application.
Having done this, we can perform dynamic loading from the index page and simply use the script tag specified in the package, it should dramatically speed up the loading time and minimize user loading to load your page. Copying node_modules is also not required.
Given the folder structure:
src |-- app | |-- main.ts | |-- index.html | |-- bundle.min.js |-- system.config.js |-- node_modules |-- tsconfig.json
You can even do all this with a single gulp task.
Task: (requires yargs):
var SystemBuilder = require('systemjs-builder'); var argv = require('yargs').argv; var builder = new SystemBuilder(); gulp.task('bundle', function () { builder.loadConfig('./system.config.js') .then(function () { var outputFile = argv.prod ? './src/app/bundle.min.js' : './src/app/bundle.js'; return builder.buildStatic('app', outputFile, { minify: argv.prod, mangle: argv.prod, rollup: argv.prod }); }) .then(function () { console.log('bundle built successfully!'); }); });
Run this task:
gulp bundle
or
gulp bundle --prod
index.html
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <base href="/" /> <title>Your App</title> <link rel="stylesheet" href='styles/bootstrap.min.css' /> <script src="/bundle.js"></script> </head> <body> <your-root-component> </your-root-component> </body> </html>
system.config.js:
(function (global) { var config = { compiler: "typescript", map: { 'jquery': 'node_modules/jquery/dist', 'bootstrap': 'node_modules/bootstrap/dist/js', "reflect-metadata": "node_modules/reflect-metadata", "zone": "node_modules/zone.js/dist", "crypto": "node_modules/crypto", 'rxjs': 'node_modules/rxjs', 'angular2-in-memory-web-api': 'node_modules/angular2-in-memory-web-api', '@angular': 'node_modules/@angular', 'moment': 'node_modules/moment', 'angular2-moment': 'node_modules/angular2-moment', 'app': 'src/app', }, meta: { 'node_modules/bootstrap/dist/js/bootstrap.js': { format: 'global', deps: ['jquery'] } }, packages: { 'jquery': { main: 'jquery.js', defaultExtension: 'js' }, 'bootstrap': { main: 'bootstrap.js', defaultExtension: 'js' }, 'zone': { main: 'zone.js', defaultExtension: 'js' }, 'reflect-metadata': { main: 'Reflect.js', defaultExtension: 'js' }, 'crypto': { main: 'sha1.js', defaultExtension: 'js' }, 'rxjs': { main: 'Rx.js', defaultExtension: 'js' }, 'moment':{main: 'moment.js', defaultExtension: 'js'}, 'angular2-moment': { main: 'index.js', defaultExtension: 'js' }, 'app': { main: 'main.js', defaultExtension: 'js' }, '@angular/common': { main: 'index.js', defaultExtension: 'js' }, '@angular/compiler': { main: 'index.js', defaultExtension: 'js' }, '@angular/core': { main: 'index.js', defaultExtension: 'js' }, '@angular/http': { main: 'index.js', defaultExtension: 'js' }, '@angular/platform-browser': { main: 'index.js', defaultExtension: 'js' }, '@angular/platform-browser-dynamic': { main: 'index.js', defaultExtension: 'js' }, '@angular/router': { main: 'index.js', defaultExtension: 'js' }, '@angular/testing': { main: 'index.js', defaultExtension: 'js' }, '@angular/upgrade': { main: 'index.js', defaultExtension: 'js' }, '@angular/forms': { main: 'index.js', defaultExtension: 'js' }, } } System.config(config); })(this);
With all that said: I believe your package section:
var packages = { 'app': { format: 'register', defaultExtension: 'js' }, 'rxjs': { defaultExtension: 'js' }, 'angular2-in-memory-web-api': { defaultExtension: 'js' } };
it should be:
var packages = { 'app': { main: 'main.js', defaultExtension: 'js' }, 'rxjs': { main: 'Rx.js', defaultExtension: 'js' }, 'angular2-in-memory-web-api': { main: 'index.js', defaultExtension: 'js' } };
main.js is any file containing your bootstrap function for angular2.