devinxiang/issue-blog

从零搭建Angular开发环境

Opened this issue · 0 comments

创建一个 Angular开发环境

第一步: 下载 node,尽量使用新的版本,低版本的环境可能会运行出错。推荐一个 node 版本管理神器 n

第二步:创建一个新的文件夹,创建 package.json

Angular 有一系列的基础依赖包,在项目运行起来钱需要先把这些基础依赖包下载到根目录下,从而方便项目引用。这些依赖包通过配置文件 package.json 管理,package.json 文件描述了 npm包的所有相关信息,包括坐着、简介、包依赖、构建等信息。

{
  "name": "hello-demo",
  "version": "1.0.0",
  "description": "Hello-world project for Angular 2",
  "author": "devin",
  "license": "MIT",
  "private": true,
  "scripts": {
    "server": "webpack-dev-server --inline --colors --progress --port 3000",
    "start": "npm run server"
  },
  "dependencies": {
    "@types/core-js": "0.9.34",
    "ts-loader": "1.2.0",
    "typescript": "2.0.0",
    "webpack": "1.12.9",
    "webpack-dev-server": "1.14.0"
  },
  "devDependencies": {
    "@angular/common": "2.0.0",
    "@angular/compiler": "2.0.0",
    "@angular/core": "2.0.0",
    "@angular/platform-browser": "2.0.0",
    "@angular/platform-browser-dynamic": "2.0.0",
    "core-js": "2.4.1",
    "reflect-metadata": "0.1.8",
    "rxjs": "5.0.0-beta.12",
    "zone.js": "0.6.26"
  }
}

主要参数:

  • name: 项目的名称;
  • version:项目的版本;
  • description:项目的简单描述
  • scripts:可以使 npm调用一些脚本,或封装一些命令;
  • DevDependencies: 项目开发时所以来的一些工具包;
  • dependencies:项目依赖的基础包。

第三步: 创建 tsconfig.json 文件

tsconfig.json 放在根目录下,它配置了 TypeScript编译器的编译参数。

{
  "compilerOptions": {
    "module": "commonjs",
    "target": "es5",
    "moduleResolution": "node",
    "sourceMap": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "removeComments": false,
    "noImplicitAny": true,
    "suppressImplicitAnyIndexErrors": true,
    "typeRoots": [
      "./node_modules/@types/"
    ]
  },
  "compileOnSave": true,
  "exclude": [
    "node_modules"
  ]
}

主要配置参数说明:

  • module: 组织代码的方式;
  • target:编译目标平台(ES3、ES5、ES6等);
  • sourceMap:把 ts文件编译成 js文件时,是否生成对应的 SourceMap文件;
  • emitDecoratorMetadata:让 TS支持为带有装饰器的声明生成元数据;
  • experimentalDecorators:是否启用实验性装饰器特性;
  • typeRoots:指定第三方库的类型定义文件的存放位置,推荐使用 node_modules/@types 文件夹;

第四步: 创建资源文件夹

到这一步,Angular项目的基本配置文件创建完成,接下来在项目根目录下创建一个 src文件夹,这个文件夹将存放项目的业务代码文件。

第五步:创建组件相关文件

在 src目录下创建app.component.ts 文件和模板文件app.component.html

//app.component.ts
import {Component} from '@angular/core';

@Component({
  selector: 'hello-world',
  templateUrl: 'src/app.component.html'
})
export class AppComponent {
}

//app.component.html
<h3>
  Hello World!
</h3>

第六步: 创建 app.module.ts 文件

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppComponent } from './app.component';

@NgModule({
  declarations: [AppComponent],
  imports: [BrowserModule],
  bootstrap: [AppComponent]
})

export class AppModule {
}

主要参数:

  • @NgModule: 用于定义模块用的装饰器;
  • declarations:导入模块依赖的组件、指令等;
  • imports:用来导入当前模块所需的其他模块。
  • bootstrap:标记处引导组件,在 Angular 启动应用时,将被标记的组件渲染到模板中。

第七步: 创建 main.ts文件

Angular 的项目一般有一个入口文件,通过这个文件来串联起整个项目。在 src目录下,创建一个这样的入口文件 main.ts,示例代码如下:

// import 'reflect-metadata';
import 'core-js'; // include reflect & polyfill
import 'zone.js';

import {platformBrowserDynamic} from '@angular/platform-browser-dynamic';
import {AppModule} from './app.module';

platformBrowserDynamic().bootstrapModule(AppModule)
  .catch(err => console.error(err));

这个例子要正常运行需要导入 reflect-metadata 和 zone.js 这两个基础库,这两个库是作为 Angular 应用依赖的 ployfill。
要启动应用,主要依赖于 Angualr 自带的 platformBrowserDynamic函数和应用模块 AppModule,然后调用 platformBrowserDynamic().bootstrapModule()方法,来编译启动 AppModule模块。

第八步: 创建 index.html 宿主页面

在项目根目录下创建 index.html 宿主页面,代码如下:

<!DOCTYPE html>
<html>
  <head>
    <meta charset=UTF-8>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Angular 2 Hello World</title>
    <base href="/">
  </head>
  <body>
    <hello-world>
      加载中...
    </hello-world>
    <script src="bundle.js"></script>
  </body>
</html>

整个 Hello World项目基本搭建完成?但是怎样将这个项目运行起来呢?首先需要打包工具,将项目打包编译。采用 webpack来完成打包编译的工作。webpack工具引入配置在package.json中。

"dependencies": {
    ...
    "webpack": "~1.12.9",
    "webpack-dev-server": "~1.14.0"
}

其中,Webpack是打包工具,而 webpack-dev-server是一个小型的服务器,开发时项目可以在这个服务器上运行。webpack也有自己的配置文件,在根目录下创建一个 webpack.config.js文件,配置如下:

var webpack = require('webpack');
var path = require('path');
module.exports = {
  entry: './src/main.ts',
  output: {
    filename: './bundle.js'
  },

  resolve: {
    root: [path.join(__dirname, 'src')],
    extensions: ['', '.ts', '.js']
  },

  module: {
    loaders: [
      { test: /\.ts$/, loader: 'ts-loader' }
    ]
  }
};

主要是配置参数:

  • entry:页面入口文件配置,可以是一个或者多个入口文件;
  • output:对应输出项配置,即输出入口文件编译后文件;
  • resolve:定义了解析模板路径时的配置,常用的是 extensions,可以用来指定模块的后缀,这样在引入模块时就不需要写后缀,他会自动补全;
  • module.loaders:它是最关键的配置项,他告知Webpack每一类文件都需要使用什么加载器来处理。

至此,Hello World 项目全部搭建完成。接下来让我们与心灵这个项目看看最终的效果,运行步骤如下:

  • 首先,运行命令 npm install 或者 yarn install,npm会根据 package.json配置文件,安装所有的依赖包。在安装过程中,会自动在根目录上创建一个 node_modules文件夹,项目依赖的包都安装在其中。
  • 然后,运行 npm start 命令启动服务
  • 最后,在浏览器中输入 localhost:4200 ,即可看到最终效果;

第二种方法创建项目

第一步:npm install -g @angular/cli
第二步:ng new hello-world 直接创建一个 hello-world项目,可以直接运行;
第三步: cd my-app
 ng serve --open
第四步: 打开浏览器输入运行的端口,即可看到最终效果