美文网首页我爱编程
学习Angular2系列(1)----配置

学习Angular2系列(1)----配置

作者: Threejs开发者 | 来源:发表于2018-03-31 22:43 被阅读0次

引子:

  1. 这是关于Angular2框架的学习记录笔记。秉着”学于网络,归于网络“的精神将学习过程记录下来,供后来者以参考。
  2. 该笔记参考了两本书:《揭秘Angular2》和《Angular权威教程(ng-book2-r34中文)》。相关PDF文档很好找。
  3. 学习过程为看两本书的讲解并运行示例代码,反复推敲。
  4. 学习推荐路线为:组件 -> 路由。然后学习其他核心模块。

一、工程配置文件

一个最简单的Angular2的工程由这2个配置文件组成。

1.1 package.json

所有的基于nodejs的项目都会有一个package.json文件,里面会定义项目名称、版本、依赖的库,以及脚本。

主要字段:

  • name,项目名称
  • version,项目版本
  • description,项目描述
  • scripts,定义了几个可以使用npm运行的脚本
  • devDependencies,项目开发时需要的一些工具包
  • dependencies,项目依赖的基础包
"name": "my-project1",
"version": "0.0.0",
"dependencies": {
    "@angular/common": "^2.3.1",
    "@angular/compiler": "^2.3.1",
    "@angular/core": "^2.3.1",
    "@angular/forms": "^2.3.1",
    "@angular/http": "^2.3.1",
    "@angular/platform-browser": "^2.3.1",
    "@angular/platform-browser-dynamic": "^2.3.1",
    "@angular/router": "^3.3.1",
    "core-js": "^2.4.1",
    "rxjs": "^5.0.1",
    "ts-helpers": "^1.1.1",
    "zone.js": "^0.7.2"
  },
 "devDependencies": {
    "@angular/compiler-cli": "^2.3.1",
    "@types/jasmine": "2.5.38",
    "@types/node": "^6.0.42",
    "angular-cli": "1.0.0-beta.28.3",
    "codelyzer": "~2.0.0-beta.1",
    "jasmine-core": "2.5.2",
    "jasmine-spec-reporter": "2.5.0",
    "karma": "1.2.0",
    "karma-chrome-launcher": "^2.0.0",
    "karma-cli": "^1.0.1",
    "karma-jasmine": "^1.0.2",
    "karma-remap-istanbul": "^0.2.1",
    "protractor": "~4.0.13",
    "ts-node": "1.2.1",
    "tslint": "^4.3.0",
    "typescript": "~2.0.3"
  }
  "scripts": {
    "ng": "ng",
    "start": "ng serve",
    "test": "ng test",
    "pree2e": "webdriver-manager update --standalone false --gecko false",
    "e2e": "protractor"
  },

1.2 tsconfig.json

配置了TypeScript编译器的编译参数。
主要字段:

  • module,代码的组织方式
  • target,编译目标平台
  • sourceMap,生产js文件时是否生成对应的sourceMap文件。
  • emitDecoratorMetadata,使TypeScript支持为带有装饰器的声明,生成元数据。
  • experimentalDecorators,是否启用实验性装饰器特性。
  • typeRoots,指定第三方库的类型定义文件的存放位置,推荐node_module/@types文件夹。
{
  "compilerOptions": {
    "baseUrl": "",
    "declaration": false,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "lib": ["es6", "dom"],
    "mapRoot": "./",
    "module": "es6",
    "moduleResolution": "node",
    "outDir": "../dist/out-tsc",
    "sourceMap": true,
    "target": "es5",
    "typeRoots": [
      "../node_modules/@types"
    ]
  }
}

二、组件相关文件

app组件相关文件,包括2个文件。

2.1 app.components.ts

import { Component } from '@angular/core';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  title = 'app works!';
}

1)导入组件模块Component
2)通过装饰器告诉Angular如何创建这个组件
3)定义一个组件类并对外输出该类

2.2 app.module.ts

Angular中使用模块组织一些功能紧密相关的代码块。而且至少有一个模块,习惯上称为AppModule。

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

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    FormsModule,
    HttpModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

1)@NgModule,用于定义模块用的装饰器。
2)declarations,导入模块依赖的组件、指令等。
3)imports,导入当前模块所需要的其他模块。

2.3 main.ts

Angular项目入口文件。

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

if (environment.production) {
  enableProdMode();
}

platformBrowserDynamic().bootstrapModule(AppModule);

编译启动AppModule模块。

2.4 index.html宿主页面

<!doctype html>
<html>
<head>
  <meta charset="utf-8">
  <title>MyProject1</title>
  <base href="/">

  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="icon" type="image/x-icon" href="favicon.ico">
</head>
<body>
  <app-root>Loading...</app-root>
</body>
</html>

1)<app-root>标签在app.component.ts中定义的selector。

三、打包工具

将项目打包编译,工具可以有Webpack、Gulp等。
方案一:
algular-cli(内核也是webpack),使用命令:ng install、ng build、ng server等命令进行构建。
方案二:
webpack配置方案。

这里使用方案一.

{
  "project": {
    "version": "1.0.0-beta.28.3",
    "name": "my-project1"
  },
  "apps": [
    {
      "root": "src",
      "outDir": "dist",
      "assets": [
        "assets",
        "favicon.ico"
      ],
      "index": "index.html",
      "main": "main.ts",
      "polyfills": "polyfills.ts",
      "test": "test.ts",
      "tsconfig": "tsconfig.json",
      "prefix": "app",
      "styles": [
        "styles.css"
      ],
      "scripts": [],
      "environments": {
        "source": "environments/environment.ts",
        "dev": "environments/environment.ts",
        "prod": "environments/environment.prod.ts"
      }
    }
  ],
  "e2e": {
    "protractor": {
      "config": "./protractor.conf.js"
    }
  },
  "lint": [
    {
      "files": "src/**/*.ts",
      "project": "src/tsconfig.json"
    },
    {
      "files": "e2e/**/*.ts",
      "project": "e2e/tsconfig.json"
    }
  ],
  "test": {
    "karma": {
      "config": "./karma.conf.js"
    }
  },
  "defaults": {
    "styleExt": "css",
    "prefixInterfaces": false,
    "inline": {
      "style": false,
      "template": false
    },
    "spec": {
      "class": false,
      "component": true,
      "directive": true,
      "module": false,
      "pipe": true,
      "service": true
    }
  }
}

至此,项目搭建完成。

<全文结束>

相关文章

网友评论

    本文标题:学习Angular2系列(1)----配置

    本文链接:https://www.haomeiwen.com/subject/meincftx.html