extends ../../ts/_cache/quickstart.jade block includes include _util-fns - var _Install = 'Get' - var _prereq = 'the Dart SDK' - var _angular_browser_uri = 'angular2/platform/browser.dart' - var _angular_core_uri = 'angular2/core.dart' - var _stepInit = 3 - var _quickstartSrcURL='https://github.com/angular-examples/quickstart' block setup-tooling :marked Install the **[Dart SDK](https://www.dartlang.org/downloads/)**, if not already on your machine, and any tools you like to use with Dart. The Dart SDK includes tools such as **[pub][pub]**, the Dart package manager. If you don't have a favorite Dart editor already, try [WebStorm][WS], which comes with a Dart plugin. You can also download [Dart plugins for other IDEs and editors][DT]. [WS]: https://confluence.jetbrains.com/display/WI/Getting+started+with+Dart [DT]: https://www.dartlang.org/tools/ [pub]: https://www.dartlang.org/tools/pub/ block package-and-config-files :marked In the project folder just created, create a file named **[pubspec.yaml][pubspec]** with the code below. This pubspec must specify the **angular2** and **browser** packages as dependencies, as well as the `angular2` transformer. It can also specify other packages and transformers for the app to use, such as [dart_to_js_script_rewriter](https://pub.dartlang.org/packages/dart_to_js_script_rewriter). [pubspec]: https://www.dartlang.org/tools/pub/pubspec.html +makeExample('quickstart/dart/pubspec.yaml', null, 'pubspec.yaml') block install-packages :marked From the project folder, run `pub get` to install the angular2 and browser packages (along with the packages they depend on). code-example(language="sh" class="code-shell"). > <span class="blk">pub get</span> Resolving dependencies... block annotation-fields :marked The call to the `@Component` constructor has two named parameters, `selector` and `template`. block create-main p. Now we need something to tell Angular to load the root component. Create: ul li a #[b folder named #[code web]] li a <b>file named #[code #[+adjExPath('app/main.ts')]]</b> with the following content: block run-app p. We have a few options for running our app. One is to launch a local HTTP server and then view the app in <a href="https://www.dartlang.org/tools/dartium/">Dartium</a>. We can use any web server, such as WebStorm's server or Python's SimpleHTTPServer. p. Another option is to build and serve the app using <code>pub serve</code>, and then run it by visiting <b><code>http://localhost:8080</code></b> in any modern browser. Pub serve generates JavaScript on the fly, which can take a while when first visiting the page. Pub serve also runs in <b><i>watch mode</i></b>, and will recompile and subsequently serve any changed assets. p. Once the app is running, the browser window should show the following: block build-app .alert.is-important :marked If you don't see **My First Angular App**, make sure you've entered all the code correctly, in the [proper folders](#wrap-up), and run `pub get`. .l-verbose-section#section-angular-run-app :marked ### Building the app (generating JavaScript) Before deploying the app, we need to generate JavaScript files. The `pub build` command makes that easy. code-example(language="sh" class="code-shell"). > <span class="blk">pub build</span> Loading source assets... :marked The generated JavaScript appears, along with supporting files, under a directory named `build`. #angular_transformer h4 Using the Angular transformer p. When generating JavaScript for an Angular app, be sure to use the Angular transformer. It analyzes the Dart code, converting reflection-using code to static code that Dart's build tools can compile to faster, smaller JavaScript. The highlighted lines in <code>pubspec.yaml</code> configure the Angular transformer: - var stylePattern = { otl: /(transformers:)|(- angular2:)|(entry_points.*$)/gm }; +makeExample('quickstart/dart/pubspec.yaml', null, 'pubspec.yaml', stylePattern) p. The <code>entry_points</code> item identifies the Dart file in our app that has a <code>main()</code> function. For more information, see the <a href="https://github.com/angular/angular/wiki/Angular-2-Dart-Transformer">Angular transformer wiki page</a>. .l-sub-section#performance h3 Performance, the transformer, and Angular 2 libraries p. When an app imports <code>bootstrap.dart</code>, it also gets <code>dart:mirrors</code>, a reflection library that causes performance problems when compiled to JavaScript. Don't worry, the Angular transformer converts the app's entry points (<code>entry_points</code> in <code>pubspec.yaml</code>) so that they don't use mirrors. #dart_to_js_script_rewriter h4 Using dart_to_js_script_rewriter :marked To improve the app's performance, convert the HTML file to directly include the generated JavaScript; one way to do that is with `dart_to_js_script_rewriter`. To use the rewriter, specify `dart_to_js_script_rewriter` in both the `dependencies` and `transformers` sections of the pubspec. - var stylePattern = { otl: /(dart_to_js_script_rewriter.*$)|(- dart_to_js_script_rewriter.*$)|(dependencies:)|(transformers:)/gm }; +makeExample('quickstart/dart/pubspec.yaml', null, 'pubspec.yaml', stylePattern) .alert.is-important :marked The `dart_to_js_script_rewriter` transformer must be **after** the `angular2` transformer in `pubspec.yaml`. :marked For more information, see the docs for [dart_to_js_script_rewriter](https://pub.dartlang.org/packages/dart_to_js_script_rewriter). block server-watching :marked To see the new version, just reload the page. .alert.is-important :marked Be sure to terminate the `pub serve` process once you stop working on this app. block project-file-structure .filetree .file angular2_quickstart .children .file lib .children .file app_component.dart .file pubspec.yaml .file web .children .file index.html .file main.dart .file styles.css .l-verbose-section :marked This figure doesn't show generated files and directories. For example, a `pubspec.lock` file specifies versions and other identifying information for the packages that our app depends on. The `pub build` command creates a `build` directory containing the JavaScript version of our app. Pub, IDEs, and other tools often create other directories and dotfiles. block project-files +makeTabs(` quickstart/ts/app/app.component.ts, quickstart/ts/app/main.ts, quickstart/ts/index.html, quickstart/dart/pubspec.yaml, quickstart/ts/styles.css`, ',,,,quickstart', `app/app.component.ts, app/main.ts, index.html, pubspec.yaml, styles.css (excerpt)`)