FED Brownbag
Like all frameworks today, setup requires additional modules.
Webpack is a module bundler based on your app's dependencies into a single or multiple files.
It is also a task runner through the use of loaders.
It’s the next version of JavaScript, and it has some great new features (sugar).
let a = 0; // Block-level scoped only!
const b = { foo: 'bar' } // read-only REFERENCE to a value (not immutable)
(c) => c * 2
// equivalent
function(c) {
return c * 2;
}
/* String */
'foobar'.startsWith('foo'); //true
'foobar'.endsWith('foo'); // false
'foobar'.includes('bar'); // true
// String interpolation
let name = 'JavaScript';
console.log(`Hello world, love ${name}!`); // Prints "Hello world, love JavaScript!"
// equivalent
"Hello world, love " + name + "!"
function greeter(person: string) {
return "Hello, " + person;
}
let name = "TypeScript";
console.log(greeter(name));
// Prints "Hello, TypeScript"
let numbers = [0, 1, 2];
console.log(greeter(numbers));
// Error: Supplied parameters do not
// match any signature of call target
git clone https://github.com/filoxo/ng2-webpack-starter.git
If cloning:
npm i angular2@2.0.0-beta.12 es6-shim reflect-metadata rxjs@5.0.0-beta.2 zone.js -S
npm i webpack-dev-server ts-loader typings -D
npm i webpack typescript -g
{
"compilerOptions": {
"target": "es5",
"module": "system",
"moduleResolution": "node",
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"removeComments": false,
"noImplicitAny": false
},
"exclude": [
"node_modules",
"typings/main",
"typings/main.d.ts"
]
}
"build": "webpack",
"start": "webpack-dev-server",
"typings": "typings",
"postinstall": "typings install"
var webpack = require("webpack");
module.exports = {
entry: {
"vendor": "./src/vendor/vendor",
"app": "./src/main"
},
output: {
path: __dirname + "/dist",
filename: "[name].bundle.js"
},
resolve: {
extensions: ['',
'.webpack.js',
'.web.js',
'.ts',
'.js']
},
devtool: 'source-map',
module: {
loaders: [
{
test: /\.ts?$/,
loader: 'ts-loader'
}
]
},
plugins: [
new webpack.optimize.CommonsChunkPlugin(
/* chunkName= */"vendor",
/* filename= */"./vendor.bundle.js"
)
]
};
import { Component } from 'angular2/core';
@Component({
selector: 'my-app',
template: '<h1>My First Angular 2 App</h1>'
})
export class AppComponent { }
import { bootstrap } from 'angular2/platform/browser';
import { AppComponent } from './app.component';
bootstrap(AppComponent);
import { Component } from 'angular2/core';
@Component({
selector: 'my-app',
template: `
<h1>{{ name }}</h1>
<h2>{{ email }}</h2>
`
})
export class AppComponent {
name: String = "";
email: String = "";
// test: number = 'asdf';
}
import { Component } from 'angular2/core';
@Component({
selector: 'my-app',
templateUrl: 'src/components/app/app.tpl.html'
})
export class AppComponent {
name: String = "";
email: String = "";
}