Skip to content

Commit fe6be8d

Browse files
hanslSplaktar
authored andcommitted
Merge Webpack Feature branch into Master (angular#1455)
* build: use webpack for building apps. This pull request replaces the underlying broccoli build system and then replaces it with webpack as the build and bundler. This will affect the following commands (however the user-level) functionality should go unchanged (besides unimplemented flags which will come after this PR.): ng build (with --env flag and --watch flag supported) ng serve (with --port flag supported) ng test / ng e2e The webpack configuration is blackboxed, and therefore users will not see a webpack.config.js file in their repository. Also this PR will bump the typescript version to 2.0 (beta). Fixes angular#909 angular#1155 angular#882 * chore(lint) Corrected any eslint errors and cleaned up unused files * chore(cleanup) additional cleanup tasks performed. Removed unneeded code, indentation causing linting errors, add back tsconfig sourcemapping, removed console logs, deleted material unused files. * chore: remove bind from serve command * chore: simplify test command * chore: fix test warnings * chore: revert whitespace changes * chore: re-add mapRoot to tsconfig * chore: remove unused import * bugfix: fix broken tests * fix: fix mobile-specific feature test * bugfix: fix public folder test * fix: fixes for path mappings, tests, and coverage (angular#1359) * fix(): Multiple fixes for path mappings: * Removed invalid test case that was throwing path mappings tests because of a typescript bug. * Readded PathsPlugin for Path Mappings * Removed coverage preprocessor which was throwing bad type errors against ts code when it shouldn't be. * Added sourcemap support for istanbul instrumenter. Coverage files are still being generated. * fix: fix the way the build command runs for mobile tests * fix: fix the way the build command runs for mobile tests * fix: replaced promise based ng command with sh.exec to allow mappings test to run correctly against mobile * fix: replaced promise based ng command with sh.exec to allow mappings test to run correctly against mobile * fix: add environment configuration replacement (angular#1364) * fix: add environment configuration replacement * remove debuggers * fix: move mobile test above config test because it relies on prod build from previous step * fix: removed unneeded interface moved config paths * fix(tests): re-enable sass/less/stylus tests (angular#1363) * chore: remove systemjs (angular#1376) * chore: remove vendor.ts (angular#1383) * chore: remove material2 test option (angular#1385) * fix(build): re-add support for sourceDir (angular#1378) * chore(build): remove broccoli (angular#1386) * chore: remove windows elevation check (angular#1384) * fix(test): add missing sourceDir (angular#1387) * fix: update node polyfill support properties for prod config to allow dev-server (aka ng serve) (angular#1395) * chore(tests): add prod env e2e test (angular#1394) * chore: cleanup of new files (angular#1388) * fix(serve): disable HMR (angular#1402) * chore: review docs (angular#1407) * feat(env): decouple build from env file (angular#1404) * fix: fix tsconfig for editors (angular#1420) * chore: fix webpack branch after merge conflicts (angular#1423) * fix: update to awesome-typescript-loader 2.1.0 (angular#1425) * fix: update to awesome-typescript-loader 2.1.0 which fixes a few issues shimming typings libs in tsconfig.json * fix: forgot to set libs in tsconfig blueprint * chore(blueprints): remove module.id (angular#1426) * feat: add host flag support for ng serve (angular#1442) * feat(test): add karma plugin (angular#1437) * chore(blueprints): re-add outDir (angular#1428) * feat: use @types instead of typings (angular#1449) * fix: make sourcemaps work in test (angular#1447) * feat: add utilities for typescript ast (angular#1159) (angular#1453) 'ast-utils.ts' provides typescript ast utility functions
1 parent 908c5a2 commit fe6be8d

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

69 files changed

+1464
-8077
lines changed

README.md

+58-23
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,7 @@ If you wish to collaborate while the project is still young, check out [our issu
1818

1919
## Prerequisites
2020

21-
The generated project has dependencies that require
22-
* **Node 4 or greater**.
23-
* **Typings v1 or greater**.
21+
The generated project has dependencies that require **Node 4 or greater**.
2422

2523
## Table of Contents
2624

@@ -30,7 +28,7 @@ The generated project has dependencies that require
3028
* [Generating Components, Directives, Pipes and Services](#generating-components-directives-pipes-and-services)
3129
* [Generating a Route](#generating-a-route)
3230
* [Creating a Build](#creating-a-build)
33-
* [Environments](#environments)
31+
* [Build Targets and Environment Files](#build-targets-and-environment-files)
3432
* [Bundling](#bundling)
3533
* [Running Unit Tests](#running-unit-tests)
3634
* [Running End-to-End Tests](#running-end-to-end-tests)
@@ -114,17 +112,33 @@ ng build
114112

115113
The build artifacts will be stored in the `dist/` directory.
116114

117-
### Environments
115+
### Build Targets and Environment Files
118116

119-
At build time, the `src/app/environment.ts` will be replaced by either
120-
`config/environment.dev.ts` or `config/environment.prod.ts`, depending on the
121-
current cli environment. The resulting file will be `dist/app/environment.ts`.
117+
A build can specify both a build target (`development` or `production`) and an
118+
environment file to be used with that build. By default, the development build
119+
target is used.
122120

123-
Environment defaults to `dev`, but you can generate a production build via
124-
the `-prod` flag in either `ng build -prod` or `ng serve -prod`.
121+
At build time, `src/app/environments/environment.ts` will be replaced by
122+
`src/app/environments/environment.{NAME}.ts` where `NAME` is the argument
123+
provided to the `--environment` flag.
124+
125+
These options also apply to the serve command. If you do not pass a value for `environment`,
126+
it will default to `dev` for `development` and `prod` for `production`.
127+
128+
```bash
129+
# these are equivalent
130+
ng build --target=production --environment=prod
131+
ng build --prod --env=prod
132+
ng build --prod
133+
# and so are these
134+
ng build --target=development --environment=dev
135+
ng build --dev --e=dev
136+
ng build --dev
137+
ng build
138+
```
125139

126140
You can also add your own env files other than `dev` and `prod` by creating a
127-
`config/environment.{NAME}.ts` and use them by using the `--env=NAME`
141+
`src/app/environments/environment.{NAME}.ts` and use them by using the `--env=NAME`
128142
flag on the build/serve commands.
129143

130144
### Bundling
@@ -138,13 +152,7 @@ all dependencies into a single file, and make use of tree-shaking techniques.
138152
ng test
139153
```
140154

141-
Tests will execute after a build is executed via [Karma](http://karma-runner.github.io/0.13/index.html), and it will automatically watch your files for changes.
142-
143-
You can run tests a single time via `--watch=false`, and turn off building of the app via `--build=false` (useful for running it at the same time as `ng serve`).
144-
145-
**WARNING:** On Windows, `ng test` is hitting a file descriptor limit (see https://github.com/angular/angular-cli/issues/977).
146-
The solution for now is to instead run `ng serve` and `ng test --build=false` in separate console windows.
147-
155+
Tests will execute after a build is executed via [Karma](http://karma-runner.github.io/0.13/index.html), and it will automatically watch your files for changes. You can run tests a single time via `--watch=false`.
148156

149157
### Running end-to-end tests
150158

@@ -198,7 +206,7 @@ You can modify the these scripts in `package.json` to run whatever tool you pref
198206

199207
### Support for offline applications
200208

201-
The index.html file includes a commented-out code snippet for installing the angular2-service-worker. This support is experimental, please see the angular/mobile-toolkit project and https://mobile.angular.io/ for documentation on how to make use of this functionality.
209+
Angular-CLI includes support for offline applications via the `--mobile` flag on `ng new`. Support is experimental, please see the angular/mobile-toolkit project and https://mobile.angular.io/ for documentation on how to make use of this functionality.
202210

203211
### Commands autocompletion
204212

@@ -225,19 +233,44 @@ source ~/.bash_profile
225233

226234
### CSS Preprocessor integration
227235

228-
We support all major CSS preprocessors:
236+
Angular-CLI supports all major CSS preprocessors:
229237
- sass (node-sass)
230238
- less (less)
231239
- compass (compass-importer + node-sass)
232240
- stylus (stylus)
233241

234-
To use one just install for example `npm install node-sass` and rename `.css` files in your project to `.scss` or `.sass`. They will be compiled automatically.
242+
To use these prepocessors simply add the file to your component's `styreUrl`:
243+
244+
```
245+
@Component({
246+
moduleId: module.id,
247+
selector: 'app-root',
248+
templateUrl: 'app.component.html',
249+
styleUrls: ['app.component.scss']
250+
})
251+
export class AppComponent {
252+
title = 'app works!';
253+
}
254+
```
255+
256+
When generating a new project you can also define which extention you want for
257+
style files:
235258

236-
The `Angular2App`'s options argument has `sassCompiler`, `lessCompiler`, `stylusCompiler` and `compassCompiler` options that are passed directly to their respective CSS preprocessors.
259+
```bash
260+
ng new sassy-project --style=sass
261+
262+
```
237263

238264
### 3rd Party Library Installation
239265

240-
The installation of 3rd party libraries are well described at our [Wiki Page](https://github.com/angular/angular-cli/wiki/3rd-party-libs)
266+
Simply install your library via `npm install lib-name` and import it in your code.
267+
268+
If the library does not include typings, you can install them using npm:
269+
270+
```bash
271+
npm install moment
272+
npm install @types/moment
273+
```
241274

242275
### Updating angular-cli
243276

@@ -307,6 +340,8 @@ the local `angular-cli` from the project which was fetched remotely from npm.
307340
Now the `angular-cli` you cloned before is in three places:
308341
The folder you cloned it into, npm's folder where it stores global packages and the `angular-cli` project you just created.
309342

343+
You can also use `ng new foo --link-cli` to automatically link the `angular-cli` package.
344+
310345
Please read the official [npm-link documentation](https://www.npmjs.org/doc/cli/npm-link.html)
311346
and the [npm-link cheatsheet](http://browsenpm.org/help#linkinganynpmpackagelocally) for more information.
312347

addon/ng2/blueprints/component/files/__path__/__name__.component.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import { Component, OnInit } from '@angular/core';
22

33
@Component({
4-
moduleId: module.id,
54
selector: '<%= selector %>',<% if(inlineTemplate) { %>
65
template: `
76
<p>
@@ -10,7 +9,7 @@ import { Component, OnInit } from '@angular/core';
109
`,<% } else { %>
1110
templateUrl: '<%= dasherizedModuleName %>.component.html',<% } if(inlineStyle) { %>
1211
styles: []<% } else { %>
13-
styleUrls: ['<%= dasherizedModuleName %>.component.css']<% } %>
12+
styleUrls: ['<%= dasherizedModuleName %>.component.<%= styleExt %>']<% } %>
1413
})
1514
export class <%= classifiedModuleName %>Component implements OnInit {
1615

addon/ng2/blueprints/component/index.js

+3-15
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,8 @@ module.exports = {
5454
route: options.route,
5555
isLazyRoute: !!options.isLazyRoute,
5656
isAppComponent: !!options.isAppComponent,
57-
selector: this.selector
57+
selector: this.selector,
58+
styleExt: this.styleExt
5859
};
5960
},
6061

@@ -114,20 +115,7 @@ module.exports = {
114115
}
115116

116117
if (!options.flat) {
117-
var filePath = path.join(this.project.ngConfig.defaults.sourceDir, 'system-config.ts');
118-
var barrelUrl = this.appDir.replace(/\\/g, '/');
119-
if (barrelUrl[0] === '/') {
120-
barrelUrl = barrelUrl.substr(1);
121-
}
122-
123-
return addBarrelRegistration(this, this.generatePath)
124-
.then(() => {
125-
return this.insertIntoFile(
126-
filePath,
127-
` '${barrelUrl}',`,
128-
{ before: ' /** @cli-barrel */' }
129-
);
130-
});
118+
return addBarrelRegistration(this, this.generatePath);
131119
} else {
132120
return addBarrelRegistration(
133121
this,
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,44 @@
1+
import 'angular2-universal-polyfills';
12
import { provide } from '@angular/core';
23
import { APP_BASE_HREF } from '@angular/common';
34
import { APP_SHELL_BUILD_PROVIDERS } from '@angular/app-shell';
4-
import { AppComponent } from './app/';
5-
import {
6-
REQUEST_URL,
7-
ORIGIN_URL
5+
import {
6+
REQUEST_URL,
7+
ORIGIN_URL,
8+
Bootloader,
9+
BootloaderConfig,
10+
AppConfig
811
} from 'angular2-universal';
12+
import { AppComponent } from './app/';
913

10-
export const options = {
11-
directives: [
12-
// The component that will become the main App Shell
13-
AppComponent
14-
],
14+
const bootloaderConfig: BootloaderConfig = {
1515
platformProviders: [
1616
APP_SHELL_BUILD_PROVIDERS,
1717
provide(ORIGIN_URL, {
18-
useValue: ''
19-
})
18+
useValue: 'http://localhost:4200' // full urls are needed for node xhr
19+
}),
20+
provide(APP_BASE_HREF, { useValue: '/' }),
21+
],
22+
async: true,
23+
preboot: false
24+
}
25+
26+
const appConfig: AppConfig = {
27+
directives: [
28+
// The component that will become the main App Shell
29+
AppComponent
2030
],
2131
providers: [
2232
// What URL should Angular be treating the app as if navigating
23-
provide(APP_BASE_HREF, {useValue: '/'}),
24-
provide(REQUEST_URL, {useValue: '/'})
25-
],
26-
async: false,
27-
preboot: false
28-
};
33+
provide(REQUEST_URL, { useValue: '/' })
34+
]
35+
}
36+
37+
export function getBootloader() : Bootloader {
38+
return new Bootloader(bootloaderConfig);
39+
}
2940

41+
export function serialize(bootloader: Bootloader, template: string) : string {
42+
appConfig.template = template;
43+
return bootloader.serializeApplication(appConfig);
44+
}

addon/ng2/blueprints/mobile/files/__path__/system-import.js

-2
This file was deleted.

addon/ng2/blueprints/ng2/files/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The app w
77

88
## Code scaffolding
99

10-
Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive/pipe/service/route/class`.
10+
Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive/pipe/service/class`.
1111

1212
## Build
1313

addon/ng2/blueprints/ng2/files/__path__/app/app.component.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import { Component } from '@angular/core';<% if (isMobile) { %>
22
import { APP_SHELL_DIRECTIVES } from '@angular/app-shell';<% } %>
33

44
@Component({
5-
moduleId: module.id,
65
selector: '<%= prefix %>-root',
76
<% if (isMobile) { %>template: `
87
<h1>
@@ -11,7 +10,7 @@ import { APP_SHELL_DIRECTIVES } from '@angular/app-shell';<% } %>
1110
`,
1211
styles: [],
1312
directives: [APP_SHELL_DIRECTIVES]<% } else { %>templateUrl: 'app.component.html',
14-
styleUrls: ['app.component.css']<% } %>
13+
styleUrls: ['app.component.<%= styleExt %>']<% } %>
1514
})
1615
export class AppComponent {
1716
title = 'app works!';

addon/ng2/blueprints/ng2/files/__path__/app/environment.ts

-7
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
// The file for the current environment will overwrite this one during build.
2+
// Different environments can be found in ./environment.{dev|prod}.ts, and
3+
// you can create your own and use it with the --env flag.
4+
// The build system defaults to the dev environment.
5+
6+
export const environment = {
7+
production: false
8+
};
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
export * from './environment';
1+
export * from './environments/environment';
22
export * from './app.component';

addon/ng2/blueprints/ng2/files/__path__/index.html

+12-39
Original file line numberDiff line numberDiff line change
@@ -5,53 +5,26 @@
55
<title><%= jsComponentName %></title>
66
<base href="/">
77

8-
{{#unless environment.production}}
9-
<script src="/ember-cli-live-reload.js" type="text/javascript"></script>
10-
{{/unless}}
118
<meta name="viewport" content="width=device-width, initial-scale=1">
129
<link rel="icon" type="image/x-icon" href="favicon.ico"><% if (isMobile) { %>
1310
<meta name="apple-mobile-web-app-capable" content="yes">
1411
<meta name="theme-color" content="#000000">
1512
<link rel="manifest" href="/manifest.webapp">
16-
{{#each mobile.icons}}
17-
<link rel="{{rel}}" {{#if sizes}}sizes="{{sizes}}" {{/if}}href="{{href}}">
18-
{{/each}}
19-
20-
{{#if environment.production}}
21-
<script type="text/javascript">
22-
if ('serviceWorker' in navigator) {
23-
navigator.serviceWorker.register('/worker.js').catch(function(err) {
24-
console.log('Error installing service worker: ', err);
25-
});
26-
}
27-
</script>
28-
{{/if}}
13+
<link rel="apple-touch-icon" href="/icons/apple-touch-icon.png">
14+
<link rel="apple-touch-icon" sizes="57x57" href="/icons/apple-touch-icon-57x57.png">
15+
<link rel="apple-touch-icon" sizes="60x60" href="/icons/apple-touch-icon-60x60.png">
16+
<link rel="apple-touch-icon" sizes="72x72" href="/icons/apple-touch-icon-72x72.png">
17+
<link rel="apple-touch-icon" sizes="76x76" href="/icons/apple-touch-icon-76x76.png">
18+
<link rel="apple-touch-icon" sizes="114x114" href="/icons/apple-touch-icon-114x114.png">
19+
<link rel="apple-touch-icon" sizes="120x120" href="/icons/apple-touch-icon-120x120.png">
20+
<link rel="apple-touch-icon" sizes="144x144" href="/icons/apple-touch-icon-144x144.png">
21+
<link rel="apple-touch-icon" sizes="152x152" href="/icons/apple-touch-icon-152x152.png">
22+
<link rel="apple-touch-icon" sizes="180x180" href="/icons/apple-touch-icon-180x180.png">
23+
<link rel="apple-touch-startup-image" href="/icons/apple-touch-icon-180x180.png">
2924
<% } %>
25+
3026
</head>
3127
<body>
3228
<<%= prefix %>-root>Loading...</<%= prefix %>-root>
33-
<% if (isMobile) { %>
34-
{{#if environment.production}}
35-
<script src="/app-concat.js" async></script>
36-
{{else}}
37-
{{#each scripts.polyfills}}
38-
<script src="{{.}}"></script>
39-
{{/each}}
40-
<script>
41-
System.import('system-config.js').then(function () {
42-
System.import('main');
43-
}).catch(console.error.bind(console));
44-
</script>
45-
{{/if}}
46-
<% } else { %>
47-
{{#each scripts.polyfills}}
48-
<script src="{{.}}"></script>
49-
{{/each}}
50-
<script>
51-
System.import('system-config.js').then(function () {
52-
System.import('main');
53-
}).catch(console.error.bind(console));
54-
</script>
55-
<% } %>
5629
</body>
5730
</html>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
// Prefer CoreJS over the polyfills above
2+
import 'core-js/es6/symbol';
3+
import 'core-js/es6/object';
4+
import 'core-js/es6/function';
5+
import 'core-js/es6/parse-int';
6+
import 'core-js/es6/parse-float';
7+
import 'core-js/es6/number';
8+
import 'core-js/es6/math';
9+
import 'core-js/es6/string';
10+
import 'core-js/es6/date';
11+
import 'core-js/es6/array';
12+
import 'core-js/es6/regexp';
13+
import 'core-js/es6/map';
14+
import 'core-js/es6/set';
15+
import 'core-js/es6/reflect';
16+
17+
import 'core-js/es7/reflect';
18+
import 'zone.js/dist/zone';

0 commit comments

Comments
 (0)