From a634f3e11316d485f789b89262169d246b4072b6 Mon Sep 17 00:00:00 2001 From: indooorsman Date: Wed, 12 Oct 2016 15:37:14 +0800 Subject: [PATCH 1/9] =?UTF-8?q?add=20author=20=E7=8E=8B=E4=BC=A0=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../66.\347\216\213\344\274\240\344\270\232.md" | 11 +++++++++++ .../\347\216\213\344\274\240\344\270\232.jpg" | Bin 0 -> 28868 bytes src/app/_shared/api/authors/index.ts | 15 ++++++++++++--- 3 files changed, 23 insertions(+), 3 deletions(-) create mode 100644 "src/app/_shared/api/authors/66.\347\216\213\344\274\240\344\270\232.md" create mode 100644 "src/app/_shared/api/authors/_images/\347\216\213\344\274\240\344\270\232.jpg" diff --git "a/src/app/_shared/api/authors/66.\347\216\213\344\274\240\344\270\232.md" "b/src/app/_shared/api/authors/66.\347\216\213\344\274\240\344\270\232.md" new file mode 100644 index 0000000..faa865f --- /dev/null +++ "b/src/app/_shared/api/authors/66.\347\216\213\344\274\240\344\270\232.md" @@ -0,0 +1,11 @@ + + module.exports = { + "name" : "王传业" + "nickname" : "indooorsman", + "website" : "https://csser.me", + "github" : "https://github.com/indooorsman", + "about" : `ng粉,2009年开始从事前端开发, + 2012年之前在人人网负责首页、个人主页、新鲜事系统等相关的前端工作, + 后参与三次创业,前端、后端、Android均有涉猎。 + 目前在盈科旅游担任前端架构师一职。` + } \ No newline at end of file diff --git "a/src/app/_shared/api/authors/_images/\347\216\213\344\274\240\344\270\232.jpg" "b/src/app/_shared/api/authors/_images/\347\216\213\344\274\240\344\270\232.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..9f55a74190d6bfb1814b90106da76809160b9854 GIT binary patch literal 28868 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 literal 0 HcmV?d00001 diff --git a/src/app/_shared/api/authors/index.ts b/src/app/_shared/api/authors/index.ts index 55cdca2..76fb1eb 100644 --- a/src/app/_shared/api/authors/index.ts +++ b/src/app/_shared/api/authors/index.ts @@ -1,6 +1,6 @@ -import {Injectable} from '@angular/core'; -import {Author} from '../../models/author'; -import {Observable} from 'rxjs/Observable'; +import {Injectable} from "@angular/core"; +import {Author} from "../../models/author"; +import {Observable} from "rxjs/Observable"; const items: Author[] = [ { id: '雪狼', @@ -19,6 +19,15 @@ const items: Author[] = [ avatar: require('./_images/余泽江.jpg'), columnist: false, homepage: 'https://github.com/trotyl/' + }, + { + id: 'indooorsman', + name: '王传业', + bio: '前端老司机,驾龄7年', + description: require('./66.王传业.md'), + avatar: require('./_images/王传业.jpg'), + columnist: false, + homepage: 'https://csser.me' } ]; @Injectable() From 3dcedbb2cf1105d445064a603dbe8a2f33e4efd4 Mon Sep 17 00:00:00 2001 From: indooorsman Date: Wed, 12 Oct 2016 15:46:06 +0800 Subject: [PATCH 2/9] auto calc my age --- src/app/_shared/api/authors/index.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/app/_shared/api/authors/index.ts b/src/app/_shared/api/authors/index.ts index 76fb1eb..b696645 100644 --- a/src/app/_shared/api/authors/index.ts +++ b/src/app/_shared/api/authors/index.ts @@ -1,6 +1,9 @@ import {Injectable} from "@angular/core"; import {Author} from "../../models/author"; import {Observable} from "rxjs/Observable"; + +let age = new Date().getFullYear() - 2009; + const items: Author[] = [ { id: '雪狼', @@ -23,7 +26,7 @@ const items: Author[] = [ { id: 'indooorsman', name: '王传业', - bio: '前端老司机,驾龄7年', + bio: `前端老司机,驾龄${age}年`, description: require('./66.王传业.md'), avatar: require('./_images/王传业.jpg'), columnist: false, From 3694f3dd4eaa33f94bc4b56123d30ea456dd4a67 Mon Sep 17 00:00:00 2001 From: indooorsman Date: Mon, 6 Feb 2017 00:26:21 +0800 Subject: [PATCH 3/9] =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/articles/indooorsman/angular-from-zero-00/index.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/app/_shared/api/articles/indooorsman/angular-from-zero-00/index.md b/src/app/_shared/api/articles/indooorsman/angular-from-zero-00/index.md index 1a15ca9..a3b5d3c 100644 --- a/src/app/_shared/api/articles/indooorsman/angular-from-zero-00/index.md +++ b/src/app/_shared/api/articles/indooorsman/angular-from-zero-00/index.md @@ -3,6 +3,7 @@ 本系列将会从零开始构建一个完整的Angular应用,不依赖任何seed或starter,也不使用Angular cli,这样做的目的是让自己对Angular应用开发的每一个环节都有一定的了解。 最终的示例会包含以下特性: + - 采用webpack进行构建、编译、模块打包 - 模板采用pug编写 - 样式采用less编写 @@ -16,6 +17,7 @@ ## 序章 ### 基础知识 + - NPM - ES6 - Webpack @@ -44,6 +46,7 @@ npm init #可按照提示填写项目基本信息,或直接一路回车 ``` - 安装依赖: + ```bash # Angular npm install @angular/common @angular/compiler @angular/compiler-cli @angular/core @angular/forms @angular/http @angular/platform-browser @angular/platform-browser-dynamic @angular/platform-server @angular/router rxjs zone.js --save @@ -54,6 +57,7 @@ npm install webpack --save-dev # Typescript npm install typescript --save-dev ``` + 注意这些并不是最终全部的依赖,随着开发的进展,后面会陆续添加其他依赖 (未完待续...) From 33af01b46bfc824a469fb8978008f1c5741f6b38 Mon Sep 17 00:00:00 2001 From: indooorsman Date: Mon, 6 Feb 2017 00:30:59 +0800 Subject: [PATCH 4/9] update --- .../indooorsman/angular-from-zero-00/index.md | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/app/_shared/api/articles/indooorsman/angular-from-zero-00/index.md b/src/app/_shared/api/articles/indooorsman/angular-from-zero-00/index.md index a3b5d3c..2a95972 100644 --- a/src/app/_shared/api/articles/indooorsman/angular-from-zero-00/index.md +++ b/src/app/_shared/api/articles/indooorsman/angular-from-zero-00/index.md @@ -1,6 +1,6 @@ # Angular 2从零开始系列 - 00 -本系列将会从零开始构建一个完整的Angular应用,不依赖任何seed或starter,也不使用Angular cli,这样做的目的是让自己对Angular应用开发的每一个环节都有一定的了解。 +本系列将会从零开始构建一个完整的Angular应用,不依赖任何seed或starter,也不使用Angular cli,这样做的目的是让自己对Angular应用开发的每一个环节都有一定的了解 最终的示例会包含以下特性: @@ -9,10 +9,11 @@ - 样式采用less编写 - 路由懒加载 - 通过npm script『一键』创建组件相关目录和文件 -- 开发环境模块热替换(hot module replacement) -- 生产环境AoT编译 +- 模块热替换(hot module replacement) +- AoT编译 +- 服务端渲染 -希望对大家有所帮助。 +希望对大家能有所帮助 ## 序章 @@ -23,7 +24,7 @@ - Webpack - Angular -以上内容是我认为在开始动手之前必须要有一定了解的,不必精通,浏览一遍各自的文档,理解其核心概念即可。 +以上内容是我认为在开始动手之前必须要有一定了解的,不必精通,浏览一遍各自的文档,理解其核心概念即可 那么这里为什么没有提`TypeScript`呢?因为根据我的实践经验,有`ES6`的基础的话,不必系统学习`TypeScript`,开发中遇到其特有的功能时进行针对性的查阅就行了 @@ -60,5 +61,5 @@ npm install typescript --save-dev 注意这些并不是最终全部的依赖,随着开发的进展,后面会陆续添加其他依赖 -(未完待续...) +(还没写完...) From f15ace6d5ef5385a7b1292cf1e2a0e8589bff51c Mon Sep 17 00:00:00 2001 From: indooorsman Date: Fri, 10 Feb 2017 01:23:36 +0800 Subject: [PATCH 5/9] =?UTF-8?q?=E7=AC=AC=E4=B8=80=E7=AF=87=E6=8A=95?= =?UTF-8?q?=E7=A8=BF=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../indooorsman/angular-from-zero-00/index.md | 256 ++++++++++++++++-- .../indooorsman/assets/screenshot1.png | Bin 0 -> 26907 bytes 2 files changed, 239 insertions(+), 17 deletions(-) create mode 100644 src/app/_shared/api/articles/indooorsman/assets/screenshot1.png diff --git a/src/app/_shared/api/articles/indooorsman/angular-from-zero-00/index.md b/src/app/_shared/api/articles/indooorsman/angular-from-zero-00/index.md index 2a95972..1d0da4e 100644 --- a/src/app/_shared/api/articles/indooorsman/angular-from-zero-00/index.md +++ b/src/app/_shared/api/articles/indooorsman/angular-from-zero-00/index.md @@ -1,23 +1,25 @@ # Angular 2从零开始系列 - 00 -本系列将会从零开始构建一个完整的Angular应用,不依赖任何seed或starter,也不使用Angular cli,这样做的目的是让自己对Angular应用开发的每一个环节都有一定的了解 +本系列将会从零开始构建一个完整的Angular项目,最终实现一个简易版的twitter,不依赖任何seed或starter,也不使用Angular cli,这样做的目的是让自己对Angular应用开发的每一个环节都有一定的了解 最终的示例会包含以下特性: -- 采用webpack进行构建、编译、模块打包 -- 模板采用pug编写 -- 样式采用less编写 +- 采用`webpack`进行构建、编译、模块打包 +- 模板采用`pug`编写,并支持分环境配置全局模板变量 +- 样式采用`less`编写,并支持分环境配置全局less变量 - 路由懒加载 -- 通过npm script『一键』创建组件相关目录和文件 +- 通过`npm script`『一键』创建组件相关目录和文件 - 模块热替换(hot module replacement) - AoT编译 - 服务端渲染 希望对大家能有所帮助 -## 序章 +  -### 基础知识 +___序章___ + +## 基础知识 - NPM - ES6 @@ -28,21 +30,21 @@ 那么这里为什么没有提`TypeScript`呢?因为根据我的实践经验,有`ES6`的基础的话,不必系统学习`TypeScript`,开发中遇到其特有的功能时进行针对性的查阅就行了 -### 创建项目 +## 创建项目 -#### 环境 +### 环境 -我们采用npm来管理依赖,NodeJS运行环境当然是必不可少的,所以第一步就是安装NodeJS +我们采用`npm`来管理依赖,`NodeJS`运行环境当然是必不可少的,所以第一步就是安装`NodeJS` 另外介于国内的网络环境,推荐使用淘宝的npm镜像:,请按照网站上的说明进行配置 -#### 初始化 +### 初始化 -- 打开终端: +- 打开终端(Windows用户建议使用[git-bash](https://git-scm.com/downloads)): ```bash -mkdir angular-app -cd angular-app +mkdir angular-twitter +cd angular-twitter npm init #可按照提示填写项目基本信息,或直接一路回车 ``` @@ -50,16 +52,236 @@ npm init #可按照提示填写项目基本信息,或直接一路回车 ```bash # Angular -npm install @angular/common @angular/compiler @angular/compiler-cli @angular/core @angular/forms @angular/http @angular/platform-browser @angular/platform-browser-dynamic @angular/platform-server @angular/router rxjs zone.js --save +npm install @angular/common @angular/compiler @angular/compiler-cli @angular/core @angular/forms @angular/http @angular/platform-browser @angular/platform-browser-dynamic @angular/platform-server @angular/router rxjs zone.js core-js --save # Webpack npm install webpack --save-dev -# Typescript +# TypeScript npm install typescript --save-dev + +# TypeScript loader for webpack +npm install awesome-typescript-loader --save-dev ``` 注意这些并不是最终全部的依赖,随着开发的进展,后面会陆续添加其他依赖 -(还没写完...) +- 目录结构: + +```text +anuglar-twitter/ +├── src/ + ├── app/ + ├── index.html + ├── tsconfig.json +├── webpack.config.js +├── package.json +``` +其中:`src`目录存放我们的ts及模板等源文件,`./webpack.config.js`是webpack的配置文件 +`./package.json`是最开始执行`npm init`之后生成的 +`./src/tsconfig.json`是typescript的配置文件 +`./src/index.html`是主页面 +`./src/app`则是我们app的具体代码喽 + +### Hello world! + +接下来我们先实现一个hello world,首先创建app的入口模块及根组件(假设你已经阅读了Angular官方的快速起步和开发指南,没有的话请移步),在`./src/app/`目录下创建如下文件: + +|文件名|说明| +|---|---| +|app.module.ts|入口模块| +|app.component.ts|根组件| +|app.template.html|根组件模板| +|app.styles.css|根组件样式| + +```typescript +//app.module.ts + +import {NgModule} from "@angular/core"; +import {AngularTwitterAppComponent} from "./app.component"; +import {BrowserModule} from "@angular/platform-browser"; +@NgModule({ + imports: [ + BrowserModule + ], + declarations: [ + AngularTwitterAppComponent + ], + providers: [], + bootstrap: [AngularTwitterAppComponent] +}) +export class AppModule { + +} +``` +```typescript +//app.component.ts + +import {Component} from "@angular/core"; +@Component({ + selector: 'angular-twitter-app', + templateUrl: './app.template.html', + styleUrls: ['./app.styles.css'] +}) +export class AngularTwitterAppComponent { + +} +``` +```html + +

Hello World !

+``` +```css +/* app.styles.css */ +h1 { + font-weight: normal; +} +``` + +然后在`./src`创建app的启动文件`main.ts` +```typescript +import 'core-js'; // es6+es7 polyfills +import 'zone.js/dist/zone.js'; // Angular所依赖的zone.js,必须在core-js之后加载 + +import {AppModule} from "./app/app.module"; +import {platformBrowserDynamic} from "@angular/platform-browser-dynamic"; +platformBrowserDynamic().bootstrapModule(AppModule); +``` + +修改`./src/tsconfig.json` +```json +{ + "compilerOptions": { + "target": "es5", + "module": "es6", + "experimentalDecorators": true, + "moduleResolution": "node", + "lib": [ + "dom", + "es6" + ], + "typeRoots": [ + "node_modules/@types" + ], + "types": [ + "node" + ] + } +} +``` + +`tsconfig.json`中各个字段的说明: + +|字段名|值|说明| +|---|---|------| +|target|es5|编译目标,将ts文件编译成符合es5规范的js代码| +|module|es6|编译目标采用es6的模块管理方式,目的是能够利用webpack和es6模块导入的特性来做tree-shaking| +|experimentalDecorators|true|使用实验性的装饰器,这个是必须的设置,因为Angular的源码中使用了它| +|moduleResolution|node|由于我们使用了node的包管理工具npm来下载依赖,所以这里也是必须的设置,
否则在ts中导入node_modules目录下的模块时,ts编译器会找不到它| +|lib|["dom","es6"]|同样是必须的设置,否则用到es6的地方编译会报错| +|typeRoots|["node_modules/@types"]|参考
| +|types|["node"]|为`require`等方法提供类型支持,需要先安装`@types/node`
(在项目根目录下执行`npm install @types/node`) + +  + +修改`webpack.config.js`: +```js +module.exports = { + entry: { + 'app': './src/main.ts' //入口文件 + }, + + output: { + path: './src', //生成打包文件的目录 + filename: '[name].bundle.js' //打包文件的名字,本例中将是`app.bundle.js` + }, + + resolve: { + extensions: ['.js', '.ts'] //这样配置在import的时候,就可以省略.js和.ts的后缀了 + }, + + module: { + rules: [ + { + test: /\.ts$/, + use: [ + { + loader: 'awesome-typescript-loader', //编译ts的loader + options: { + configFileName: './src/tsconfig.json' //配置tsconfig.json的路径 + } + }, + 'angular2-template-loader' //这个loader会把Angular组件中的templateUrl和styleUrls替换成template和styles,并添加require,参考 + ] + }, + { + test: /\.(css|html|htm)$/, + use: 'raw-loader' //对于css、html、htm直接取得起文本内容,在之后的文章里会分别替换成less和pug + } + ] + } +}; +``` + +修改`./src/index.html`: +```html + + + + + + + Angular Twitter Demo + + + Loading... + + + + +``` + +最后,我们通过npm scripts来写一段脚本执行打包和启动一个静态服务器 + +修改`./package.json`: +```json +{ + "name": "angular-twitter", + ... + "scripts": { + "webpack": "webpack --config ./webpack.config.js --bail --progress", + "server": "static-server ./src", + "start": "npm run webpack && npm run server" + }, + ... +} +``` +其中`scripts.webpack`中的命令参数说明: + +|参数|说明| +|---|---| +|--config|指定配置文件路径| +|--bail|当打包时遇到第一个错误就立刻中断打包| +|--progress|显示打包进度| + +更多的参数说明请参考 + +`scripts.server`中用到了一个新的node模块`static-server`,所以我们需要在项目根目录下执行`npm install static-server --save-dev` + +好啦!现在我们可以在项目根目录下执行`npm start`来试试看了! + +执行`npm start`之后若看到如下的提示,就说明已经打包成功并且启动了静态服务: + +```bash +* Static server successfully started. +* Serving files at: http://localhost:9080 +* Press Ctrl+C to shutdown. +``` + +现在用浏览器打开`http://localhost:9080`: + +![screenshot1](../assets/screenshot1.png) + +序章到此就结束了,下一章将引入`pug`和`less`,以及通过`webpack`的`file-loader`来处理模板和样式中对图片等静态资源的引用。 +示例源码: \ No newline at end of file diff --git a/src/app/_shared/api/articles/indooorsman/assets/screenshot1.png b/src/app/_shared/api/articles/indooorsman/assets/screenshot1.png new file mode 100644 index 0000000000000000000000000000000000000000..1ad712cef4b3de45cb783c7ca4b6d8247c1ff4fc GIT binary patch literal 26907 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 CuB`n4 literal 0 HcmV?d00001 From b9908c874b700eb28b3d815f8eaba05243b4000e Mon Sep 17 00:00:00 2001 From: indooorsman Date: Fri, 10 Feb 2017 10:45:36 +0800 Subject: [PATCH 6/9] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=A0=BC=E5=BC=8F?= =?UTF-8?q?=E5=92=8C=E9=94=99=E5=88=AB=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../indooorsman/angular-from-zero-00/index.md | 35 +++++++++++-------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/src/app/_shared/api/articles/indooorsman/angular-from-zero-00/index.md b/src/app/_shared/api/articles/indooorsman/angular-from-zero-00/index.md index 1d0da4e..14cfcab 100644 --- a/src/app/_shared/api/articles/indooorsman/angular-from-zero-00/index.md +++ b/src/app/_shared/api/articles/indooorsman/angular-from-zero-00/index.md @@ -10,6 +10,8 @@ - 路由懒加载 - 通过`npm script`『一键』创建组件相关目录和文件 - 模块热替换(hot module replacement) +- 多国语言支持 +- 动态加载组件 - AoT编译 - 服务端渲染 @@ -77,11 +79,13 @@ anuglar-twitter/ ├── webpack.config.js ├── package.json ``` -其中:`src`目录存放我们的ts及模板等源文件,`./webpack.config.js`是webpack的配置文件 -`./package.json`是最开始执行`npm init`之后生成的 -`./src/tsconfig.json`是typescript的配置文件 -`./src/index.html`是主页面 -`./src/app`则是我们app的具体代码喽 +其中: +- `src`目录存放我们的ts及模板等源文件 +- `./webpack.config.js`是webpack的配置文件 +- `./package.json`是最开始执行`npm init`之后生成的 +- `./src/tsconfig.json`是typescript的配置文件 +- `./src/index.html`是主页面 +- `./src/app`则是我们app的具体代码喽 ### Hello world! @@ -94,7 +98,7 @@ anuglar-twitter/ |app.template.html|根组件模板| |app.styles.css|根组件样式| -```typescript +```js //app.module.ts import {NgModule} from "@angular/core"; @@ -114,7 +118,7 @@ export class AppModule { } ``` -```typescript +```js //app.component.ts import {Component} from "@angular/core"; @@ -139,7 +143,7 @@ h1 { ``` 然后在`./src`创建app的启动文件`main.ts` -```typescript +```js import 'core-js'; // es6+es7 polyfills import 'zone.js/dist/zone.js'; // Angular所依赖的zone.js,必须在core-js之后加载 @@ -169,7 +173,6 @@ platformBrowserDynamic().bootstrapModule(AppModule); } } ``` - `tsconfig.json`中各个字段的说明: |字段名|值|说明| @@ -180,7 +183,7 @@ platformBrowserDynamic().bootstrapModule(AppModule); |moduleResolution|node|由于我们使用了node的包管理工具npm来下载依赖,所以这里也是必须的设置,
否则在ts中导入node_modules目录下的模块时,ts编译器会找不到它| |lib|["dom","es6"]|同样是必须的设置,否则用到es6的地方编译会报错| |typeRoots|["node_modules/@types"]|参考
| -|types|["node"]|为`require`等方法提供类型支持,需要先安装`@types/node`
(在项目根目录下执行`npm install @types/node`) +|types|["node"]|为`require`等方法提供类型支持,需要先安装`@types/node`
(在项目根目录下执行`npm install @types/node --save`)   @@ -211,12 +214,15 @@ module.exports = { configFileName: './src/tsconfig.json' //配置tsconfig.json的路径 } }, - 'angular2-template-loader' //这个loader会把Angular组件中的templateUrl和styleUrls替换成template和styles,并添加require,参考 + 'angular2-template-loader' + // angular2-template-loader会把Angular组件中的templateUrl和styleUrls替换成template和styles, + // 并添加require,参考 + // 当然需要先安装它:在项目根目录下执行`npm install angular2-template-loader --save-dev` ] }, { test: /\.(css|html|htm)$/, - use: 'raw-loader' //对于css、html、htm直接取得起文本内容,在之后的文章里会分别替换成less和pug + use: 'raw-loader' //对于css、html、htm直接取得其文本内容,在之后的文章里会分别替换成less和pug } ] } @@ -241,7 +247,7 @@ module.exports = { ``` -最后,我们通过npm scripts来写一段脚本执行打包和启动一个静态服务器 +最后,我们通过npm scripts来写一段脚本执行打包和启动一个静态服务器(更多关于npm scripts的信息请参考以及) 修改`./package.json`: ```json @@ -271,7 +277,6 @@ module.exports = { 好啦!现在我们可以在项目根目录下执行`npm start`来试试看了! 执行`npm start`之后若看到如下的提示,就说明已经打包成功并且启动了静态服务: - ```bash * Static server successfully started. * Serving files at: http://localhost:9080 @@ -284,4 +289,4 @@ module.exports = { 序章到此就结束了,下一章将引入`pug`和`less`,以及通过`webpack`的`file-loader`来处理模板和样式中对图片等静态资源的引用。 -示例源码: \ No newline at end of file +示例源码: From c158269f77fc082e579f62cdd2825a55fcf80f0c Mon Sep 17 00:00:00 2001 From: indooorsman Date: Fri, 10 Feb 2017 11:28:34 +0800 Subject: [PATCH 7/9] =?UTF-8?q?=E4=BF=AE=E6=94=B9typeRoots=E8=B7=AF?= =?UTF-8?q?=E5=BE=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/articles/indooorsman/angular-from-zero-00/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/_shared/api/articles/indooorsman/angular-from-zero-00/index.md b/src/app/_shared/api/articles/indooorsman/angular-from-zero-00/index.md index 14cfcab..c875a54 100644 --- a/src/app/_shared/api/articles/indooorsman/angular-from-zero-00/index.md +++ b/src/app/_shared/api/articles/indooorsman/angular-from-zero-00/index.md @@ -165,7 +165,7 @@ platformBrowserDynamic().bootstrapModule(AppModule); "es6" ], "typeRoots": [ - "node_modules/@types" + "../node_modules/@types" ], "types": [ "node" @@ -182,7 +182,7 @@ platformBrowserDynamic().bootstrapModule(AppModule); |experimentalDecorators|true|使用实验性的装饰器,这个是必须的设置,因为Angular的源码中使用了它| |moduleResolution|node|由于我们使用了node的包管理工具npm来下载依赖,所以这里也是必须的设置,
否则在ts中导入node_modules目录下的模块时,ts编译器会找不到它| |lib|["dom","es6"]|同样是必须的设置,否则用到es6的地方编译会报错| -|typeRoots|["node_modules/@types"]|参考
| +|typeRoots|["../node_modules/@types"]|参考
| |types|["node"]|为`require`等方法提供类型支持,需要先安装`@types/node`
(在项目根目录下执行`npm install @types/node --save`)   From 72bdde7977873b7c7c123703d02b2e5d33682abf Mon Sep 17 00:00:00 2001 From: indooorsman Date: Fri, 10 Feb 2017 12:26:32 +0800 Subject: [PATCH 8/9] add raw-loader --- .../api/articles/indooorsman/angular-from-zero-00/index.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/app/_shared/api/articles/indooorsman/angular-from-zero-00/index.md b/src/app/_shared/api/articles/indooorsman/angular-from-zero-00/index.md index c875a54..d16048d 100644 --- a/src/app/_shared/api/articles/indooorsman/angular-from-zero-00/index.md +++ b/src/app/_shared/api/articles/indooorsman/angular-from-zero-00/index.md @@ -222,7 +222,9 @@ module.exports = { }, { test: /\.(css|html|htm)$/, - use: 'raw-loader' //对于css、html、htm直接取得其文本内容,在之后的文章里会分别替换成less和pug + use: 'raw-loader' + // 对于css、html、htm直接取得其文本内容,在之后的文章里会分别替换成less和pug + // 在项目根目录下执行`npm install raw-loader --save-dev` } ] } From b36f4b13c61e9e42a96ccfd370fd3b4bd6812e58 Mon Sep 17 00:00:00 2001 From: indooorsman Date: Fri, 10 Feb 2017 12:32:45 +0800 Subject: [PATCH 9/9] update github url --- .../api/articles/indooorsman/angular-from-zero-00/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/_shared/api/articles/indooorsman/angular-from-zero-00/index.md b/src/app/_shared/api/articles/indooorsman/angular-from-zero-00/index.md index d16048d..e96d7b2 100644 --- a/src/app/_shared/api/articles/indooorsman/angular-from-zero-00/index.md +++ b/src/app/_shared/api/articles/indooorsman/angular-from-zero-00/index.md @@ -291,4 +291,4 @@ module.exports = { 序章到此就结束了,下一章将引入`pug`和`less`,以及通过`webpack`的`file-loader`来处理模板和样式中对图片等静态资源的引用。 -示例源码: +示例源码: