I am learning angular2 from quickstart
Since I want to gulp systemjs-bundle with angular, something is wrong.
Angular2 versoin is 2.0.0-rc.5
I am pretty sure I am missing some basic aspect of it but I can't find it in my code.
BTW: if I don't want gulp bundle task, change html code:
<script src="app/bundle.js"></script>
to
<script>
System.import('app').catch(function(err){ console.error(err); });
</script>
everything is fine, and work it out.
So I think that something is wrong with gulp bundle task.
here is an error message
nhandled Promise rejection: EXCEPTION: Error in ./AppComponent class AppComponent_Host - inline template:0:0
bundle.js Error: The selector "my-app" did not match any elements
here is main source code
HTML:
<html>
<head>
<title>Angular 2 QuickStart</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="styles.css">
<!-- 1. Load libraries -->
<!-- 2. Configure SystemJS -->
<script src="libs/vendors.min.js"></script>
<script src="app/bundle.js"></script>
</head>
<!-- 3. Display the application -->
<body>
<my-app>Loading...</my-app>
</body>
</html>
system.config.js
/**
* System configuration for Angular 2 samples
* Adjust as necessary for your application needs.
*/
(function(global) {
// map tells the System loader where to look for things
var map = {
'app': 'app', // 'dist',
'@angular': 'libs/@angular',
'angular2-in-memory-web-api': 'libs/angular2-in-memory-web-api',
'rxjs': 'libs/rxjs'
};
// packages tells the System loader how to load when no filename and/or no extension
var packages = {
'app': { main: 'main.js', defaultExtension: 'js' },
'rxjs': { defaultExtension: 'js' },
'angular2-in-memory-web-api': { main: 'index.js', defaultExtension: 'js' },
};
var ngPackageNames = [
'common',
'compiler',
'core',
'forms',
'http',
'platform-browser',
'platform-browser-dynamic',
'router',
'router-deprecated',
'upgrade',
];
// Individual files (~300 requests):
function packIndex(pkgName) {
packages['@angular/'+pkgName] = { main: 'index.js', defaultExtension: 'js' };
}
// Bundled (~40 requests):
function packUmd(pkgName) {
packages['@angular/'+pkgName] = { main: 'bundles/' + pkgName + '.umd.js', defaultExtension: 'js' };
}
// Most environments should use UMD; some (Karma) need the individual index files
var setPackageConfig = System.packageWithIndex ? packIndex : packUmd;
// Add package entries for angular packages
ngPackageNames.forEach(setPackageConfig);
var config = {
map: map,
packages: packages
};
System.config(config);
})(this);
gulpfile:
const gulp = require('gulp');
const del = require('del');
const runSequence = require('run-sequence');
const nodemon = require("gulp-nodemon");
const typescript = require('gulp-typescript');
const sourcemaps = require('gulp-sourcemaps');
const tscConfig = require('./tsconfig.json');
const tslint = require('gulp-tslint');
const concat = require('gulp-concat');
const uglify = require('gulp-uglify');
const SystemBuilder = require('systemjs-builder');
const argv = require('yargs').argv;
const builder = new SystemBuilder('dist', './system.config.js');
// clean the contents of the distribution directory
gulp.task('clean', function () {
return del('dist/**/*');
});
// TypeScript Server compile
gulp.task('compile', function () {
return gulp
.src(['src/**/*.ts'])
.pipe(sourcemaps.init()) // <--- sourcemaps
.pipe(typescript(tscConfig.compilerOptions))
.pipe(sourcemaps.write(".")) // <--- sourcemaps
.pipe(gulp.dest("dist"));
});
gulp.task('copy:libs', function () {
// concatenate non-angular2 libs, shims & systemjs-config
gulp.src([
'node_modules/jquery/dist/jquery.min.js',
'node_modules/bootstrap/dist/js/bootstrap.min.js',
'node_modules/core-js/client/shim.min.js',
'node_modules/zone.js/dist/zone.js',
'node_modules/reflect-metadata/Reflect.js',
'node_modules/systemjs/dist/system.src.js',
'system.config.js',
])
.pipe(concat('vendors.min.js'))
.pipe(uglify())
.pipe(gulp.dest('dist/libs'));
return gulp.src([
'./node_modules/@angular/**/*',
'./node_modules/angular2-in-memory-web-api/**/*',
'./node_modules/rxjs/**/*'
], { base: "./node_modules" })
.pipe(gulp.dest('dist/libs'))
});
gulp.task('bundle', function () {
return builder.buildStatic('app', 'dist/app/bundle.js')
.then(function () {
return del(['dist/app/**/*', '!dist/app/bundle.js']);
})
.catch(function (err) {
console.error('>>> [systemjs-builder] Bundling failed'.bold.green, err);
});
});
gulp.task('copy:assets', function () {
return gulp.src(['src/**/*', "index.html", '!src/**/*.ts'])
.pipe(gulp.dest('dist'))
});
gulp.task('nodemon', function () {
nodemon({ script: "dist/index.js" });
});
gulp.task("watch", function () {
return gulp.watch('src/**/*.*', ['compile']);
});
gulp.task('tslint', function () {
return gulp.src('src/**/*.ts')
.pipe(tslint({
formatter: "verbose"
}))
.pipe(tslint.report());
});
gulp.task('build', function (callback) {
runSequence('clean', 'compile', 'copy:libs', 'bundle', 'copy:assets', 'watch', 'nodemon', callback);
});
gulp.task('default', ['build']);
You don't need to reference your bundle.js in a script tag. You just need System.import
. I usually just point directly to my bundle file like this:
System.import('app/bundle.js').catch(function(err){ console.error(err); });