2019-04-02 00:12:55 -06:00
# Setup for Upgrading from AngularJS
2017-03-27 16:08:53 +01:00
2019-04-02 00:12:55 -06:00
<!--
Question: Can we remove this file and instead direct readers to https://github.com/angular/quickstart/blob/master/README.md
-->
2017-04-01 01:57:13 +02:00
2019-04-02 00:12:55 -06:00
<div class="alert is-critical">
2017-02-22 18:09:39 +00:00
2019-04-02 00:12:55 -06:00
**Audience: ** Use this guide **only ** in the context of [Upgrading from AngularJS ](guide/upgrade "Upgrading from AngularJS to Angular" ) or [Upgrading for Performance ](guide/upgrade-performance "Upgrading for Performance" ).
Those Upgrade guides refer to this Setup guide for information about using the [deprecated QuickStart GitHub repository ](https://github.com/angular/quickstart "Deprecated Angular QuickStart GitHub repository" ), which was created prior to the current Angular [CLI ](cli "CLI Overview" ).
2017-04-01 01:57:13 +02:00
2019-04-02 00:12:55 -06:00
**For all other scenarios, ** see the current instructions in [Local Environment Setup ](guide/setup-local "Setting up for Local Development" ).
2017-04-01 01:57:13 +02:00
2017-05-04 18:46:43 +02:00
2019-04-02 00:12:55 -06:00
</div>
<!--
The <live-example name=quickstart>QuickStart live-coding</live-example> example is an Angular _ playground _ .
There are also some differences from a local app, to simplify that live-coding experience.
In particular, the QuickStart live-coding example shows just the AppComponent file; it creates the equivalent of app.module.ts and main.ts internally for the playground only.
-->
2017-04-01 01:57:13 +02:00
2019-04-02 00:12:55 -06:00
This guide describes how to develop locally on your own machine.
Setting up a new project on your machine is quick and easy with the [QuickStart seed on github ](https://github.com/angular/quickstart "Install the github QuickStart repo" ).
2017-04-01 01:57:13 +02:00
2019-04-02 00:12:55 -06:00
**Prerequisite: ** Make sure you have [Node.js® and npm installed ](guide/setup-local#prerequisites "Angular prerequisites" ).
{@a clone}
2017-05-26 21:28:06 +02:00
## Clone
2017-02-22 18:09:39 +00:00
Perform the _ clone-to-launch _ steps with these terminal commands.
2017-03-30 20:04:18 +01:00
2017-02-22 18:09:39 +00:00
<code-example language="sh" class="code-shell">
2017-04-01 01:57:13 +02:00
git clone https://github.com/angular/quickstart.git quickstart
cd quickstart
npm install
npm start
2017-02-22 18:09:39 +00:00
</code-example>
2017-04-10 16:51:13 +01:00
<div class="alert is-important">
2017-02-22 18:09:39 +00:00
2017-04-01 01:57:13 +02:00
2017-06-20 14:53:17 -04:00
`npm start` fails in _ Bash for Windows _ in versions earlier than the Creator's Update (April 2017).
2017-02-22 18:09:39 +00:00
2017-04-10 16:51:13 +01:00
</div>
2017-02-22 18:09:39 +00:00
{@a download}
2017-04-01 01:57:13 +02:00
2017-05-26 21:28:06 +02:00
## Download
2017-03-31 12:23:16 +01:00
<a href="https://github.com/angular/quickstart/archive/master.zip" title="Download the QuickStart seed repository">Download the QuickStart seed</a>
2017-02-22 18:09:39 +00:00
and unzip it into your project folder. Then perform the remaining steps with these terminal commands.
2017-03-30 20:04:18 +01:00
2017-02-22 18:09:39 +00:00
<code-example language="sh" class="code-shell">
2017-04-01 01:57:13 +02:00
cd quickstart
npm install
npm start
2017-02-22 18:09:39 +00:00
</code-example>
2017-04-10 16:51:13 +01:00
<div class="alert is-important">
2017-02-22 18:09:39 +00:00
2017-04-01 01:57:13 +02:00
2017-06-20 14:53:17 -04:00
`npm start` fails in _ Bash for Windows _ in versions earlier than the Creator's Update (April 2017).
2017-02-22 18:09:39 +00:00
2017-04-10 16:51:13 +01:00
</div>
2017-02-22 18:09:39 +00:00
{@a non-essential}
2017-04-01 01:57:13 +02:00
2017-02-22 18:09:39 +00:00
## Delete _non-essential_ files (optional)
You can quickly delete the _ non-essential _ files that concern testing and QuickStart repository maintenance
(***including all git-related artifacts*** such as the `.git` folder and `.gitignore` !).
2017-04-10 16:51:13 +01:00
<div class="alert is-important">
2017-02-22 18:09:39 +00:00
2017-04-01 01:57:13 +02:00
2017-02-22 18:09:39 +00:00
Do this only in the beginning to avoid accidentally deleting your own tests and git setup!
2017-04-10 16:51:13 +01:00
</div>
2017-02-22 18:09:39 +00:00
2017-04-01 01:57:13 +02:00
2017-02-22 18:09:39 +00:00
Open a terminal window in the project folder and enter the following commands for your environment:
### OS/X (bash)
2017-03-30 20:04:18 +01:00
2017-02-22 18:09:39 +00:00
<code-example language="sh" class="code-shell">
2017-04-01 01:57:13 +02:00
xargs rm -rf < non-essential-files.osx.txt
rm src/app/*.spec*.ts
rm non-essential-files.osx.txt
2017-02-22 18:09:39 +00:00
</code-example>
2017-04-01 01:57:13 +02:00
2017-02-22 18:09:39 +00:00
### Windows
2017-03-30 20:04:18 +01:00
2017-02-22 18:09:39 +00:00
<code-example language="sh" class="code-shell">
2017-04-01 01:57:13 +02:00
for /f %i in (non-essential-files.txt) do del %i /F /S /Q
rd .git /s /q
rd e2e /s /q
2017-02-22 18:09:39 +00:00
</code-example>
{@a seed}
2017-04-01 01:57:13 +02:00
2017-02-22 18:09:39 +00:00
## What's in the QuickStart seed?
2017-03-27 16:08:53 +01:00
2017-04-01 01:57:13 +02:00
2019-04-02 00:12:55 -06:00
The **QuickStart seed ** provides a basic QuickStart playground application and other files necessary for local development.
Consequently, there are many files in the project folder on your machine,
2018-10-10 14:28:49 -07:00
most of which you can [learn about later ](guide/file-structure ).
2017-03-27 16:08:53 +01:00
{@a app-files}
2017-04-01 01:57:13 +02:00
2017-03-27 16:08:53 +01:00
Focus on the following three TypeScript (`.ts` ) files in the * * `/src` ** folder.
2017-03-30 20:04:18 +01:00
2017-04-11 21:44:52 +01:00
<div class='filetree'>
2017-03-27 16:08:53 +01:00
2017-04-11 21:44:52 +01:00
<div class='file'>
2017-03-27 16:08:53 +01:00
src
2017-04-11 21:44:52 +01:00
</div>
<div class='children'>
<div class='file'>
2017-03-27 16:08:53 +01:00
app
2017-04-11 21:44:52 +01:00
</div>
<div class='children'>
<div class='file'>
2017-03-27 16:08:53 +01:00
app.component.ts
2017-04-11 21:44:52 +01:00
</div>
2017-03-27 16:08:53 +01:00
2017-04-11 21:44:52 +01:00
<div class='file'>
2017-03-27 16:08:53 +01:00
app.module.ts
2017-04-11 21:44:52 +01:00
</div>
2017-03-27 16:08:53 +01:00
2017-04-11 21:44:52 +01:00
</div>
2017-03-27 16:08:53 +01:00
2017-04-11 21:44:52 +01:00
<div class='file'>
2017-03-27 16:08:53 +01:00
main.ts
2017-04-11 21:44:52 +01:00
</div>
2017-03-27 16:08:53 +01:00
2017-04-11 21:44:52 +01:00
</div>
2017-03-27 16:08:53 +01:00
2017-04-11 21:44:52 +01:00
</div>
2017-03-27 16:08:53 +01:00
<code-tabs>
2018-10-11 13:29:59 +02:00
<code-pane header="src/app/app.component.ts" path="setup/src/app/app.component.ts">
2017-03-27 16:08:53 +01:00
</code-pane>
2018-10-11 13:29:59 +02:00
<code-pane header="src/app/app.module.ts" path="setup/src/app/app.module.ts">
2017-03-27 16:08:53 +01:00
</code-pane>
2018-10-11 13:29:59 +02:00
<code-pane header="src/main.ts" path="setup/src/main.ts">
2017-03-27 16:08:53 +01:00
</code-pane>
</code-tabs>
2017-04-01 01:57:13 +02:00
2017-06-09 17:48:53 -04:00
All guides and cookbooks have _ at least these core files _ .
2017-02-22 18:09:39 +00:00
Each file has a distinct purpose and evolves independently as the application grows.
Files outside `src/` concern building, deploying, and testing your app.
They include configuration files and external dependencies.
Files inside `src/` "belong" to your app.
Add new Typescript, HTML and CSS files inside the `src/` directory, most of them inside `src/app` ,
unless told to do otherwise.
The following are all in `src/`
2017-03-30 20:04:18 +01:00
2017-02-22 18:09:39 +00:00
<style>
td, th {vertical-align: top}
</style>
2017-03-30 20:04:18 +01:00
2017-02-22 18:09:39 +00:00
<table width="100%">
<col width="20%">
</col>
<col width="80%">
</col>
<tr>
<th>
File
</th>
<th>
Purpose
</th>
</tr>
<tr>
<td>
2017-03-31 12:23:16 +01:00
<code>app/app.component.ts</code>
2017-02-22 18:09:39 +00:00
</td>
<td>
2017-04-01 01:57:13 +02:00
Defines the same `AppComponent` as the one in the QuickStart playground.
It is the **root ** component of what will become a tree of nested components
2017-06-09 17:48:53 -04:00
as the application evolves.
2017-02-22 18:09:39 +00:00
</td>
</tr>
2017-03-31 12:23:16 +01:00
<tr>
2017-03-30 20:04:18 +01:00
2017-02-22 18:09:39 +00:00
<td>
<code>app/app.module.ts</code>
</td>
<td>
2017-04-01 01:57:13 +02:00
2017-06-09 17:48:53 -04:00
Defines `AppModule` , the [root module ](guide/bootstrapping "AppModule: the root module" ) that tells Angular how to assemble the application.
2017-04-01 01:57:13 +02:00
Right now it declares only the `AppComponent` .
Soon there will be more components to declare.
2017-02-22 18:09:39 +00:00
</td>
</tr>
<tr>
<td>
2017-03-31 12:23:16 +01:00
<code>main.ts</code>
2017-02-22 18:09:39 +00:00
</td>
<td>
2017-04-01 01:57:13 +02:00
2017-04-30 22:10:32 +02:00
Compiles the application with the [JIT compiler ](guide/glossary#jit ) and
2017-07-04 10:58:20 -04:00
[bootstraps ](guide/bootstrapping )
2017-04-01 01:57:13 +02:00
the application's main module (`AppModule` ) to run in the browser.
The JIT compiler is a reasonable choice during the development of most projects and
2017-11-03 18:08:28 +01:00
it's the only viable choice for a sample running in a _ live-coding _ environment like Stackblitz.
2017-04-01 01:57:13 +02:00
You'll learn about alternative compiling and [deployment ](guide/deployment ) options later in the documentation.
2017-02-22 18:09:39 +00:00
</td>
</tr>
</table>
2017-03-27 16:08:53 +01:00
2018-07-19 15:00:08 -07:00
<div class="alert is-helpful">
2017-03-27 16:08:53 +01:00
2017-04-01 01:57:13 +02:00
2017-02-22 18:09:39 +00:00
### Next Step
2017-04-30 22:10:32 +02:00
If you're new to Angular, we recommend you follow the [tutorial ](tutorial "Tour of Heroes tutorial" ).
2017-03-27 16:08:53 +01:00
2017-04-10 16:51:13 +01:00
</div>
2017-03-27 16:08:53 +01:00
2017-02-22 18:09:39 +00:00
<br></br><br></br>
{@a install-prerequisites}
2017-04-01 01:57:13 +02:00
2018-04-26 16:38:23 -07:00
## Appendix: Node.js and npm
2017-04-01 01:57:13 +02:00
2018-04-26 15:47:31 -07:00
[Node.js ](https://nodejs.org/en/ ) and the [npm ](https://www.npmjs.com/ ) package manager are essential to modern web development with Angular and other platforms.
2018-04-26 19:50:42 -07:00
Node.js powers client development and build tools.
The _ npm _ package manager, which is itself a _ Node.js _ application, installs JavaScript libraries.
2017-03-27 16:08:53 +01:00
<a href="https://docs.npmjs.com/getting-started/installing-node" target="_blank" title="Installing Node.js and updating npm">
Get them now</a> if they're not already installed on your machine.
2018-04-26 15:47:31 -07:00
**Verify that you are running Node.js `v8.x` or higher and npm `5.x` or higher **
2017-03-27 16:08:53 +01:00
by running the commands `node -v` and `npm -v` in a terminal/console window.
Older versions produce errors.
2018-04-26 15:47:31 -07:00
We recommend [nvm ](https://github.com/creationix/nvm ) for managing multiple versions of Node.js and npm.
You may need [nvm ](https://github.com/creationix/nvm ) if you already have projects running on your machine that use other versions of Node.js and npm.
2017-03-31 12:23:16 +01:00
2018-01-27 13:45:03 +09:00
2019-04-02 00:12:55 -06:00
## Appendix: Develop locally with IE
2018-01-27 13:45:03 +09:00
2019-04-02 00:12:55 -06:00
If you develop angular locally with `ng serve` , a `websocket` connection is set up automatically between browser and local dev server, so when your code changes, the browser can automatically refresh.
2018-01-27 13:45:03 +09:00
2019-04-02 00:12:55 -06:00
In Windows, by default, one application can only have 6 websocket connections, <a href="https://msdn.microsoft.com/library/ee330736%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396#websocket_maxconn " title="MSDN WebSocket settings">MSDN WebSocket Settings</a>.
So when IE is refreshed (manually or automatically by `ng serve` ), sometimes the websocket does not close properly. When websocket connections exceed the limitations, a `SecurityError` will be thrown. This error will not affect the angular application, you can just restart IE to clear this error, or modify the windows registry to update the limitations.
2018-04-01 23:09:00 +09:00
2019-04-02 00:12:55 -06:00
## Appendix: Test using `fakeAsync()/async()`
2018-04-01 23:09:00 +09:00
2019-04-02 00:12:55 -06:00
If you use the `fakeAsync()/async()` helper function to run unit tests (for details, read the [Testing guide ](guide/testing#async-test-with-fakeasync )), you need to import `zone.js/dist/zone-testing` in your test setup file.
2018-04-01 23:09:00 +09:00
<div class="alert is-important">
If you create project with `Angular/CLI` , it is already imported in `src/test.ts` .
</div>
And in the earlier versions of `Angular` , the following files were imported or added in your html file:
```
import 'zone.js/dist/long-stack-trace-zone';
import 'zone.js/dist/proxy';
import 'zone.js/dist/sync-test';
import 'zone.js/dist/jasmine-patch';
import 'zone.js/dist/async-test';
import 'zone.js/dist/fake-async-test';
```
2019-04-02 00:12:55 -06:00
You can still load those files separately, but the order is important, you must import `proxy` before `sync-test` , `async-test` , `fake-async-test` and `jasmine-patch` . And you also need to import `sync-test` before `jasmine-patch` , so it is recommended to just import `zone-testing` instead of loading those separated files.