618 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			618 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
# QuickStart
 | 
						|
 | 
						|
Good tools make application development quicker and easier to maintain than
 | 
						|
if you did everything by hand.
 | 
						|
 | 
						|
The [**Angular CLI**](https://cli.angular.io/) is a **_command line interface_** tool
 | 
						|
that can create a project, add files, and perform a variety of ongoing development tasks such
 | 
						|
as testing, bundling, and deployment.
 | 
						|
 | 
						|
The goal in this guide is to build and run a simple Angular
 | 
						|
application in TypeScript, using the Angular CLI
 | 
						|
while adhering to the [Style Guide](guide/styleguide) recommendations that
 | 
						|
benefit _every_ Angular project.
 | 
						|
 | 
						|
By the end of the chapter, you'll have a basic understanding of development with the CLI
 | 
						|
and a foundation for both these documentation samples and for real world applications.
 | 
						|
 | 
						|
<!--
 | 
						|
 | 
						|
You'll pursue these ends in the following high-level steps:
 | 
						|
 | 
						|
1. [Set up](guide/cli-quickstart#devenv) the development environment.
 | 
						|
2. [Create](guide/cli-quickstart#create-proj) a new project and skeleton application.
 | 
						|
3. [Serve](guide/cli-quickstart#serve) the application.
 | 
						|
4. [Edit](guide/cli-quickstart#first-component) the application.
 | 
						|
 | 
						|
-->
 | 
						|
 | 
						|
And you can also <a href="generated/zips/cli-quickstart/cli-quickstart.zip" target="_blank">download the example.</a>
 | 
						|
 | 
						|
 | 
						|
 | 
						|
<h2 id='devenv'>
 | 
						|
  Step 1. Set up the Development Environment
 | 
						|
</h2>
 | 
						|
 | 
						|
 | 
						|
 | 
						|
You need to set up your development environment before you can do anything.
 | 
						|
 | 
						|
Install **[Node.js® and npm](https://nodejs.org/en/download/)**
 | 
						|
if they are not already on your machine.
 | 
						|
 | 
						|
<div class="l-sub-section">
 | 
						|
 | 
						|
 | 
						|
 | 
						|
**Verify that you are running at least node `6.9.x` and npm `3.x.x`**
 | 
						|
by running `node -v` and `npm -v` in a terminal/console window.
 | 
						|
Older versions produce errors, but newer versions are fine.
 | 
						|
 | 
						|
</div>
 | 
						|
 | 
						|
 | 
						|
 | 
						|
Then **install the [Angular CLI](https://github.com/angular/angular-cli)** globally.
 | 
						|
 | 
						|
 | 
						|
<code-example language="sh" class="code-shell">
 | 
						|
  npm install -g @angular/cli
 | 
						|
 | 
						|
</code-example>
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
<h2 id='create-proj'>
 | 
						|
  Step 2. Create a new project
 | 
						|
</h2>
 | 
						|
 | 
						|
 | 
						|
 | 
						|
Open a terminal window.
 | 
						|
 | 
						|
 | 
						|
Generate a new project and skeleton application by running the following commands:
 | 
						|
 | 
						|
 | 
						|
<code-example language="sh" class="code-shell">
 | 
						|
  ng new my-app
 | 
						|
 | 
						|
</code-example>
 | 
						|
 | 
						|
 | 
						|
 | 
						|
<div class="l-sub-section">
 | 
						|
 | 
						|
 | 
						|
 | 
						|
Patience please.
 | 
						|
It takes time to set up a new project, most of it spent installing npm packages.
 | 
						|
 | 
						|
 | 
						|
</div>
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
<h2 id='serve'>
 | 
						|
  Step 3: Serve the application
 | 
						|
</h2>
 | 
						|
 | 
						|
 | 
						|
 | 
						|
Go to the project directory and launch the server.
 | 
						|
 | 
						|
 | 
						|
<code-example language="sh" class="code-shell">
 | 
						|
  cd my-app
 | 
						|
  ng serve --open
 | 
						|
 | 
						|
</code-example>
 | 
						|
 | 
						|
 | 
						|
 | 
						|
The `ng serve` command launches the server, watches your files,
 | 
						|
and rebuilds the app as you make changes to those files.
 | 
						|
 | 
						|
Using the `--open` (or just `-o`) option will automatically open your browser
 | 
						|
on `http://localhost:4200/`.
 | 
						|
 | 
						|
Your app greets you with a message:
 | 
						|
 | 
						|
 | 
						|
<figure>
 | 
						|
  <img src='generated/images/guide/cli-quickstart/app-works.png' alt="The app works!">
 | 
						|
</figure>
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
<h2 id='first-component'>
 | 
						|
  Step 4: Edit your first Angular component
 | 
						|
</h2>
 | 
						|
 | 
						|
 | 
						|
 | 
						|
The CLI created the first Angular component for you.
 | 
						|
This is the _root component_ and it is named `app-root`.
 | 
						|
You can find it in `./src/app/app.component.ts`.
 | 
						|
 | 
						|
 | 
						|
Open the component file and change the `title` property from _Welcome to app!!_ to _Welcome to My First Angular App!!_:
 | 
						|
 | 
						|
 | 
						|
<code-example path="cli-quickstart/src/app/app.component.ts" region="title" title="src/app/app.component.ts" linenums="false"></code-example>
 | 
						|
 | 
						|
 | 
						|
 | 
						|
The browser reloads automatically with the revised title. That's nice, but it could look better.
 | 
						|
 | 
						|
Open `src/app/app.component.css` and give the component some style.
 | 
						|
 | 
						|
 | 
						|
<code-example path="cli-quickstart/src/app/app.component.css" title="src/app/app.component.css" linenums="false"></code-example>
 | 
						|
 | 
						|
 | 
						|
 | 
						|
<figure>
 | 
						|
  <img src='generated/images/guide/cli-quickstart/my-first-app.png' alt="Output of QuickStart app">
 | 
						|
</figure>
 | 
						|
 | 
						|
 | 
						|
 | 
						|
Looking good!
 | 
						|
 | 
						|
 | 
						|
 | 
						|
## What's next?
 | 
						|
That's about all you'd expect to do in a "Hello, World" app.
 | 
						|
 | 
						|
You're ready to take the [Tour of Heroes Tutorial](tutorial) and build
 | 
						|
a small application that demonstrates the great things you can build with Angular.
 | 
						|
 | 
						|
Or you can stick around a bit longer to learn about the files in your brand new project.
 | 
						|
 | 
						|
 | 
						|
 | 
						|
## Project file review
 | 
						|
 | 
						|
An Angular CLI project is the foundation for both quick experiments and enterprise solutions.
 | 
						|
 | 
						|
The first file you should check out is `README.md`.
 | 
						|
It has some basic information on how to use CLI commands.
 | 
						|
Whenever you want to know more about how Angular CLI works make sure to visit
 | 
						|
[the Angular CLI repository](https://github.com/angular/angular-cli) and
 | 
						|
[Wiki](https://github.com/angular/angular-cli/wiki).
 | 
						|
 | 
						|
Some of the generated files might be unfamiliar to you.
 | 
						|
 | 
						|
 | 
						|
 | 
						|
### The `src` folder
 | 
						|
Your app lives in the `src` folder.
 | 
						|
All Angular components, templates, styles, images, and anything else your app needs go here.
 | 
						|
Any files outside of this folder are meant to support building your app.
 | 
						|
 | 
						|
 | 
						|
<div class='filetree'>
 | 
						|
  <div class='file'>src</div>
 | 
						|
  <div class='children'>
 | 
						|
    <div class='file'>app</div>
 | 
						|
    <div class='children'>
 | 
						|
      <div class='file'>app.component.css</div>
 | 
						|
      <div class='file'>app.component.html</div>
 | 
						|
      <div class="file">app.component.spec.ts</div>
 | 
						|
      <div class="file">app.component.ts</div>
 | 
						|
      <div class="file">app.module.ts</div>
 | 
						|
    </div>
 | 
						|
    <div class="file">assets</div>
 | 
						|
    <div class='children'>
 | 
						|
      <div class="file">.gitkeep</div>
 | 
						|
    </div>
 | 
						|
    <div class="file">environments</div>
 | 
						|
    <div class='children'>
 | 
						|
      <div class="file">environment.prod.ts</div>
 | 
						|
      <div class="file">environment.ts</div>
 | 
						|
    </div>
 | 
						|
    <div class="file">favicon.ico</div>
 | 
						|
    <div class="file">index.html</div>
 | 
						|
    <div class="file">main.ts</div>
 | 
						|
    <div class="file">polyfills.ts</div>
 | 
						|
    <div class="file">styles.css</div>
 | 
						|
    <div class="file">test.ts</div>
 | 
						|
    <div class="file">tsconfig.app.json</div>
 | 
						|
    <div class="file">tsconfig.spec.json</div>
 | 
						|
  </div>
 | 
						|
</div>
 | 
						|
 | 
						|
 | 
						|
 | 
						|
<style>
 | 
						|
  td, th {vertical-align: top}
 | 
						|
</style>
 | 
						|
 | 
						|
 | 
						|
 | 
						|
<table width="100%">
 | 
						|
  <col width="20%">
 | 
						|
  </col>
 | 
						|
  <col width="80%">
 | 
						|
  </col>
 | 
						|
  <tr>
 | 
						|
    <th>
 | 
						|
      File
 | 
						|
    </th>
 | 
						|
    <th>
 | 
						|
      Purpose
 | 
						|
    </th>
 | 
						|
  </tr>
 | 
						|
  <tr>
 | 
						|
    <td>
 | 
						|
 | 
						|
      `app/app.component.{ts,html,css,spec.ts}`
 | 
						|
 | 
						|
    </td>
 | 
						|
    <td>
 | 
						|
 | 
						|
      Defines the `AppComponent` along with an HTML template, CSS stylesheet, and a unit test.
 | 
						|
      It is the **root** component of what will become a tree of nested components
 | 
						|
      as the application evolves.
 | 
						|
 | 
						|
    </td>
 | 
						|
  </tr>
 | 
						|
  <tr>
 | 
						|
    <td>
 | 
						|
 | 
						|
      `app/app.module.ts`
 | 
						|
 | 
						|
    </td>
 | 
						|
    <td>
 | 
						|
 | 
						|
      Defines `AppModule`, the [root module](guide/bootstrapping "AppModule: the root module") that tells Angular how to assemble the application.
 | 
						|
      Right now it declares only the `AppComponent`.
 | 
						|
      Soon there will be more components to declare.
 | 
						|
 | 
						|
    </td>
 | 
						|
  </tr>
 | 
						|
  <tr>
 | 
						|
    <td>
 | 
						|
 | 
						|
      `assets/*`
 | 
						|
 | 
						|
    </td>
 | 
						|
    <td>
 | 
						|
 | 
						|
      A folder where you can put images and anything else to be copied wholesale
 | 
						|
      when you build your application.
 | 
						|
 | 
						|
    </td>
 | 
						|
  </tr>
 | 
						|
  <tr>
 | 
						|
    <td>
 | 
						|
 | 
						|
      `environments/*`
 | 
						|
 | 
						|
    </td>
 | 
						|
    <td>
 | 
						|
 | 
						|
      This folder contains one file for each of your destination environments,
 | 
						|
      each exporting simple configuration variables to use in your application.
 | 
						|
      The files are replaced on-the-fly when you build your app.
 | 
						|
      You might use a different API endpoint for development than you do for production
 | 
						|
      or maybe different analytics tokens.
 | 
						|
      You might even use some mock services.
 | 
						|
      Either way, the CLI has you covered.
 | 
						|
 | 
						|
    </td>
 | 
						|
  </tr>
 | 
						|
  <tr>
 | 
						|
    <td>
 | 
						|
 | 
						|
      `favicon.ico`
 | 
						|
 | 
						|
    </td>
 | 
						|
    <td>
 | 
						|
 | 
						|
      Every site wants to look good on the bookmark bar.
 | 
						|
      Get started with your very own Angular icon.
 | 
						|
 | 
						|
    </td>
 | 
						|
  </tr>
 | 
						|
  <tr>
 | 
						|
    <td>
 | 
						|
 | 
						|
      `index.html`
 | 
						|
 | 
						|
    </td>
 | 
						|
    <td>
 | 
						|
 | 
						|
      The main HTML page that is served when someone visits your site.
 | 
						|
      Most of the time you'll never need to edit it.
 | 
						|
      The CLI automatically adds all `js` and `css` files when building your app so you
 | 
						|
      never need to add any `<script>` or `<link>` tags here manually.
 | 
						|
 | 
						|
    </td>
 | 
						|
  </tr>
 | 
						|
  <tr>
 | 
						|
    <td>
 | 
						|
 | 
						|
      `main.ts`
 | 
						|
 | 
						|
    </td>
 | 
						|
    <td>
 | 
						|
 | 
						|
      The main entry point for your app.
 | 
						|
      Compiles the application with the [JIT compiler](guide/glossary#jit)
 | 
						|
      and bootstraps the application's root module (`AppModule`) to run in the browser.
 | 
						|
      You can also use the [AOT compiler](guide/glossary#ahead-of-time-aot-compilation)
 | 
						|
      without changing any code by passing in `--aot` to `ng build` or `ng serve`.
 | 
						|
 | 
						|
    </td>
 | 
						|
  </tr>
 | 
						|
  <tr>
 | 
						|
    <td>
 | 
						|
 | 
						|
      `polyfills.ts`
 | 
						|
 | 
						|
    </td>
 | 
						|
    <td>
 | 
						|
 | 
						|
      Different browsers have different levels of support of the web standards.
 | 
						|
      Polyfills help normalize those differences.
 | 
						|
      You should be pretty safe with `core-js` and `zone.js`, but be sure to check out
 | 
						|
      the [Browser Support guide](guide/browser-support) for more information.
 | 
						|
 | 
						|
    </td>
 | 
						|
  </tr>
 | 
						|
  <tr>
 | 
						|
    <td>
 | 
						|
 | 
						|
      `styles.css`
 | 
						|
 | 
						|
    </td>
 | 
						|
    <td>
 | 
						|
 | 
						|
      Your global styles go here.
 | 
						|
      Most of the time you'll want to have local styles in your components for easier maintenance,
 | 
						|
      but styles that affect all of your app need to be in a central place.
 | 
						|
 | 
						|
    </td>
 | 
						|
  </tr>
 | 
						|
  <tr>
 | 
						|
    <td>
 | 
						|
 | 
						|
      `test.ts`
 | 
						|
 | 
						|
    </td>
 | 
						|
    <td>
 | 
						|
 | 
						|
      This is the main entry point for your unit tests.
 | 
						|
      It has some custom configuration that might be unfamiliar, but it's not something you'll
 | 
						|
      need to edit.
 | 
						|
    </td>
 | 
						|
  </tr>
 | 
						|
  <tr>
 | 
						|
    <td>
 | 
						|
 | 
						|
      `tsconfig.{app|spec}.json`
 | 
						|
    </td>
 | 
						|
    <td>
 | 
						|
 | 
						|
      TypeScript compiler configuration for the Angular app (`tsconfig.app.json`)
 | 
						|
      and for the unit tests (`tsconfig.spec.json`).
 | 
						|
 | 
						|
    </td>
 | 
						|
  </tr>
 | 
						|
</table>
 | 
						|
 | 
						|
### The root folder
 | 
						|
 | 
						|
The `src/` folder is just one of the items inside the project's root folder.
 | 
						|
Other files help you build, test, maintain, document, and deploy the app.
 | 
						|
These files go in the root folder next to `src/`.
 | 
						|
 | 
						|
 | 
						|
<div class='filetree'>
 | 
						|
  <div class="file">my-app</div>
 | 
						|
  <div class='children'>
 | 
						|
    <div class="file">e2e</div>
 | 
						|
    <div class='children'>
 | 
						|
      <div class="file">app.e2e-spec.ts</div>
 | 
						|
      <div class="file">app.po.ts</div>
 | 
						|
      <div class="file">tsconfig.e2e.json</div>
 | 
						|
    </div>
 | 
						|
    <div class="file">node_modules/...</div>
 | 
						|
    <div class="file">src/...</div>
 | 
						|
    <div class="file">.angular-cli.json</div>
 | 
						|
    <div class="file">.editorconfig</div>
 | 
						|
    <div class="file">.gitignore</div>
 | 
						|
    <div class="file">karma.conf.js</div>
 | 
						|
    <div class="file">package.json</div>
 | 
						|
    <div class="file">protractor.conf.js</div>
 | 
						|
    <div class="file">README.md</div>
 | 
						|
    <div class="file">tsconfig.json</div>
 | 
						|
    <div class="file">tslint.json</div>
 | 
						|
  </div>
 | 
						|
</div>
 | 
						|
 | 
						|
<style>
 | 
						|
  td, th {vertical-align: top}
 | 
						|
</style>
 | 
						|
 | 
						|
 | 
						|
 | 
						|
<table width="100%">
 | 
						|
  <col width="20%">
 | 
						|
  </col>
 | 
						|
  <col width="80%">
 | 
						|
  </col>
 | 
						|
  <tr>
 | 
						|
    <th>
 | 
						|
      File
 | 
						|
    </th>
 | 
						|
    <th>
 | 
						|
      Purpose
 | 
						|
    </th>
 | 
						|
  </tr>
 | 
						|
  <tr>
 | 
						|
    <td>
 | 
						|
 | 
						|
      `e2e/`
 | 
						|
 | 
						|
    </td>
 | 
						|
    <td>
 | 
						|
 | 
						|
      Inside `e2e/` live the End-to-End tests.
 | 
						|
      They shouldn't be inside `src/` because e2e tests are really a separate app that
 | 
						|
      just so happens to test your main app.
 | 
						|
      That's also why they have their own `tsconfig.e2e.json`.
 | 
						|
 | 
						|
    </td>
 | 
						|
  </tr>
 | 
						|
  <tr>
 | 
						|
    <td>
 | 
						|
 | 
						|
      `node_modules/`
 | 
						|
 | 
						|
    </td>
 | 
						|
    <td>
 | 
						|
 | 
						|
      `Node.js` creates this folder and puts all third party modules listed in
 | 
						|
      `package.json` inside of it.
 | 
						|
    </td>
 | 
						|
  </tr>
 | 
						|
  <tr>
 | 
						|
    <td>
 | 
						|
 | 
						|
      `.angular-cli.json`
 | 
						|
 | 
						|
    </td>
 | 
						|
    <td>
 | 
						|
 | 
						|
      Configuration for Angular CLI.
 | 
						|
      In this file you can set several defaults and also configure what files are included
 | 
						|
      when your project is build.
 | 
						|
      Check out the official documentation if you want to know more.
 | 
						|
 | 
						|
    </td>
 | 
						|
  </tr>
 | 
						|
  <tr>
 | 
						|
    <td>
 | 
						|
 | 
						|
      `.editorconfig`
 | 
						|
 | 
						|
    </td>
 | 
						|
    <td>
 | 
						|
 | 
						|
      Simple configuration for your editor to make sure everyone that uses your project
 | 
						|
      has the same basic configuration.
 | 
						|
      Most editors support an `.editorconfig` file.
 | 
						|
      See http://editorconfig.org for more information.
 | 
						|
 | 
						|
    </td>
 | 
						|
  </tr>
 | 
						|
  <tr>
 | 
						|
    <td>
 | 
						|
 | 
						|
      `.gitignore`
 | 
						|
 | 
						|
    </td>
 | 
						|
    <td>
 | 
						|
 | 
						|
      Git configuration to make sure autogenerated files are not commited to source control.
 | 
						|
 | 
						|
    </td>
 | 
						|
  </tr>
 | 
						|
  <tr>
 | 
						|
    <td>
 | 
						|
 | 
						|
      `karma.conf.js`
 | 
						|
 | 
						|
    </td>
 | 
						|
    <td>
 | 
						|
 | 
						|
      Unit test configuration for the [Karma test runner](https://karma-runner.github.io),
 | 
						|
      used when running `ng test`.
 | 
						|
 | 
						|
    </td>
 | 
						|
  </tr>
 | 
						|
  <tr>
 | 
						|
    <td>
 | 
						|
 | 
						|
      `package.json`
 | 
						|
 | 
						|
    </td>
 | 
						|
    <td>
 | 
						|
 | 
						|
      `npm` configuration listing the third party packages your project uses.
 | 
						|
      You can also add your own [custom scripts](https://docs.npmjs.com/misc/scripts) here.
 | 
						|
 | 
						|
    </td>
 | 
						|
  </tr>
 | 
						|
  <tr>
 | 
						|
    <td>
 | 
						|
 | 
						|
      `protractor.conf.js`
 | 
						|
 | 
						|
    </td>
 | 
						|
    <td>
 | 
						|
 | 
						|
      End-to-end test configuration for [Protractor](http://www.protractortest.org/),
 | 
						|
      used when running `ng e2e`.
 | 
						|
 | 
						|
    </td>
 | 
						|
  </tr>
 | 
						|
  <tr>
 | 
						|
    <td>
 | 
						|
 | 
						|
      `README.md`
 | 
						|
 | 
						|
    </td>
 | 
						|
    <td>
 | 
						|
 | 
						|
      Basic documentation for your project, pre-filled with CLI command information.
 | 
						|
      Make sure to enhance it with project documentation so that anyone
 | 
						|
      checking out the repo can build your app!
 | 
						|
 | 
						|
    </td>
 | 
						|
  </tr>
 | 
						|
  <tr>
 | 
						|
    <td>
 | 
						|
 | 
						|
      `tsconfig.json`
 | 
						|
 | 
						|
    </td>
 | 
						|
    <td>
 | 
						|
 | 
						|
      TypeScript compiler configuration for your IDE to pick up and give you helpful tooling.
 | 
						|
 | 
						|
    </td>
 | 
						|
  </tr>
 | 
						|
  <tr>
 | 
						|
    <td>
 | 
						|
 | 
						|
      `tslint.json`
 | 
						|
 | 
						|
    </td>
 | 
						|
    <td>
 | 
						|
 | 
						|
      Linting configuration for [TSLint](https://palantir.github.io/tslint/) together with
 | 
						|
      [Codelyzer](http://codelyzer.com/), used when running `ng lint`.
 | 
						|
      Linting helps keep your code style consistent.
 | 
						|
 | 
						|
    </td>
 | 
						|
  </tr>
 | 
						|
</table>
 | 
						|
 | 
						|
<div class="l-sub-section">
 | 
						|
 | 
						|
### Next Step
 | 
						|
 | 
						|
If you're new to Angular, continue with the
 | 
						|
[tutorial](tutorial "Tour of Heroes tutorial").
 | 
						|
You can skip the "Setup" step since you're already using the Angular CLI setup.
 | 
						|
 | 
						|
</div>
 |