Angular2使用Angular CLI快速搭建工程(一)


Posted in Javascript onMay 21, 2017

前言:

本文适合Angular2的初学者阅读;

时下web前端发展迅猛,新框架层出不穷,大家都知道三驾马车VueJS,Angular2,React。国内VueJS非常热门,百度热点趋势以1000%的涨幅在增加。Angular2在国外非常受欢迎,在国内的粉丝还非常少,文章不多,究其原因有这么几点主要是学习曲线陡峭,上手困难,(1)angular本身概念难懂,(2)使用typescript开发,用到很多es6特性;(3)配置太多,复杂,工程架构搭建上手难度大。本文为了解决项目搭建的问题,详细的一步步演示了如何搭建angular2项目;

为什么选择Angular CLI?

在开发中,搭建一个良好的前端架构非常重要,他对后续的开发,维护,团队协作,易读性具有重要意义;

生产中搭建Angular2的前端架构一般有三种选择:

第一种是自己一点点的搭建,这种对开发者要求比较高,必须对框架具有很深入的理解和很丰富的使用经验,否则搭建起来会遇到非常多的问题;

第二种是直接使用Angular2 seed,一些国外优秀程序员在github上已经贡献了,非常感激!我本人也站在前人的基础上加上了一些自己的内容,构建了一套脚手架,初学者们可以拿来即用,后面不断的去理解其中原委。hotshots-angular2-webpack-seed;这里面用刀了懒加载,webpack code splitting,涵盖angular2的很多知识点;

第三种就是本文要讲的使用angular2提供的Angular CLI来快速搭建,他本质也是使用了webpack来编译,打包,压缩等构建的事情,适合想用webpack的特性又不想学习webpack那些复杂的配置的开发者;

利弊:使用Angular CLI可以很快,很简单的构建angular2项目,只要掌握几行命令就能构建出前端架构的最佳实践,让人惊叹!不好的一面,简单的东西就意味着不灵活,如果你想高可控的配置你的项目,还是建议选择第二种方案;在本文写的这个时间(2016-12-2),Angular CLI还处于beta阶段,还只能用来自娱自乐,还不能用在生产中;

AngularCLI主要特性

1 Angular CLI 可以快速搭建框架,创建module,service,class,directive等;

2 具有webpack的功能,代码分割(code splitting),按需加载;

3 代码打包压缩;

4 模块测试,端到端测试;

5 热部署,有改动立即重新编译,不用刷新浏览器;而且速度很快

6 有开发环境,测试环境,生产环境的配置,不用自己操心; 

7 sass,less的预编译Angular CLI都会自动识别后缀来编译;

8 typescript的配置,Angular CLI在创建应用时都可以自己配置;

9 在创建好的工程也可以做一些个性化的配置,webpack的具体配置还不支持,未来可能会增加;

10 Angular CLI创建的工程结构是最佳实践,生产可用;

开始搭建,基础工具的安装:

你需要安装NodeJS 5.0以上版本,NPM 3.0以上版本;WebStorm 11;

安装 Angular CLI

windows: npm install -g angular-cli

macOS: sudo npm install -g angular-cli

创建Angular2工程

注:本文的工程代码https://github.com/linweiwei123/hotshots-angular2-cli-demo

ng new project_name ,project_name是你的项目名;

Angular2使用Angular CLI快速搭建工程(一)

上图就是创建的过程,此时在创建中,npm也在下载相关的包,耐心等待;从控制台中可以看到创建的内容;

Angular2使用Angular CLI快速搭建工程(一)

工程结构图如下:

Angular2使用Angular CLI快速搭建工程(一)

就这样,最简单的angular2工程创建好了;

工程结构熟悉一下:angular-cli.json 是angular-cli的配置文件,测试配置文件karma.conf.js,typescript的lint配置文件,端到端的测试配置文件protractor.conf.js,导入es6模块的配置文件polyfills.ts,angular工程的main.ts引导启动文件,全局样式style.css,typescript配置文件ts.config.json;typescript的声明文件typings.d.ts,以及生成了最贱的的一个angular组建 app.components相关的css,html,ts。这些配置都是angular2的生产项目中需要配置的文件,angular-cli帮我们做了这么多事情,我们只用了一个命令;

启动

cd project_name 

ng serve

Angular2使用Angular CLI快速搭建工程(一)

浏览器输入 http://localhost:4200/ 就可以看到app works!

尝试的修改一下app.component.ts中的文字,看看热部署是否马上生效?yes!it does!

创建module,component,service,class

Angular2使用Angular CLI快速搭建工程(一)

创建一个home的module;

ng g component home

Angular2使用Angular CLI快速搭建工程(一)

我们看到 app下面多了一个home的component,它应有的css,html,*.spec.ts(测试代码),ts都生成了;如果没有组件化经验的同学可能会问,为啥有css,html,ts,*.spec.ts都放在这下面啊?因为组件化可以重复使用,提高效率,庞大的工程代码中可以提高可维护性,阅读性,方便测试等等;

再试着创建一个angular的模块

ng g module about

Angular2使用Angular CLI快速搭建工程(一)

可以看出模块比component多了一个module.ts文件。

其他内容类似,读者可以自己尝试;

按需加载和代码分割

在生产中,代码会是庞大的,在单页面应用中,如果没有代码分割和按需加载,那么第一次加载的时间就会非常久,可能要非常多的时间,这是无法接受的;而且用户可能只需要访问某部分的内容,把全部的代码返回给用户,这也说不过去;所以在大的应用中,代码分割和按需加载久非常的重要;

前面我们已经提到,angular-cli使用了webpack做编译的事情,那言外之意,我们可以用使用webpack中的code splitting来分割代码,用angular的loadChildren来实现懒加载;

webpack的code splitting官网怎么使用,没用过的读者需要自行补脑;webpack code splitting;

接下来我们来实现一下,第一步:在app.module.ts中添加路由

Angular2使用Angular CLI快速搭建工程(一)

在app.component.html中添加路由的代码

Angular2使用Angular CLI快速搭建工程(一)

router-outlet就是输出的地方;

我们前面创建了一个home.component和一个abou的module。按需加载就是about这个module中实现;

所以在about.module.ts中添加以下内容:

Angular2使用Angular CLI快速搭建工程(一)

认真校对,跟我的对比,是否有缺失内容了;然后我们启动应用ng serve;

Angular2使用Angular CLI快速搭建工程(一)

可以看出代码进行了分割,多了一个0.chunk.js。why?,因为webpack会对require.ensure的地方进行分割,我们接下来再浏览器中访问下看看他的按需加载

Angular2使用Angular CLI快速搭建工程(一)

输入localhost:4200,我们看到默认访问/home,why?其实在代码中我们已经默认是home;我们点击about:

Angular2使用Angular CLI快速搭建工程(一)

可以看到router到了about的页面,并且多了一个0.chunk.js的js。

这个就是我们刚刚代码分割出来的东西,其实就是about模块相关的内容的js,包括了css,html,js,当然,没油包含测试代码;

集成angular material2,可能会比较复杂一点了

当然,上面讲的内容还远远不够,生产中还需要UI框架啊,你可以选择bootstrap,也可以自己写,也可以使用angular material2,往往也需要混用;

自己写的css就放在styles.css文件中,或者是外部文件在styles.css中引用进来;

如果是boostrap文件在angular-cli.json中应用,方式如下:

Angular2使用Angular CLI快速搭建工程(一)

安装angular material2 。

执行以下命令:

npm install --save@angular2-material/core@angular2-material/button@angular2-material/card@angular2-material/radio@angular2-material/checkbox@angular2-material/slider@angular2-material/tooltip

在app.module.ts中加入以下代码,这里当做全局的用

Angular2使用Angular CLI快速搭建工程(一)

接下来我们就能使用一些material的UI组件了,我们在home中使用下试试

然后我们在home.component.html 添加

Angular2使用Angular CLI快速搭建工程(一)

在哪里用都可以,因为是全局的。

理论上这样操作就可以了,但是其实material还依赖一个叫hammerjs的组件我们还没install,直接编译肯定报错,我们安装下,按顺序执行下面2个命令

npm install --save hammerjs


npm install --save@types/hammerjs

在app.module.ts中 import 'hammerjs';

Angular2使用Angular CLI快速搭建工程(一)

如此,我们就可以ng serve启动了,可以看到了material的一些组件了

Angular2使用Angular CLI快速搭建工程(一)

使用iconfont

iconfont是阿里巴巴的icon项目,阿里巴巴使用,也公开对外使用,现在一些公司都使用了,它有CDN,访问快,用起来也很方便,这章节讲下如何使用iconfont;(当然,本质上就是引用一个icon的font文件,无论用bootstrap的还是自己做的,都是一样的,希望读者触类旁通)

由于篇幅过长,请到我的另一篇文章《Angular2-使用Angular-CLI快速搭建工程(二) 》继续查看

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery实现菜单感应鼠标滑动动画效果的方法
Feb 28 Javascript
jQuery.form插件的使用及跨域异步上传文件
Apr 27 Javascript
Node.js的npm包管理器基础使用教程
May 26 Javascript
BootStrap 轮播插件(carousel)支持左右手势滑动的方法(三种)
Jul 07 Javascript
React Native实现进度条弹框的示例代码
Jul 17 Javascript
微信小程序实现图片懒加载的示例代码
Dec 13 Javascript
js数组去重的N种方法(小结)
Jun 07 Javascript
使用Angular Cli如何创建Angular私有库详解
Jan 30 Javascript
使用flow来规范javascript的变量类型
Sep 12 Javascript
JS实现排行榜文字向上滚动轮播效果
Nov 26 Javascript
JS函数进阶之prototy用法实例分析
Jan 15 Javascript
JavaScript事件循环及宏任务微任务原理解析
Sep 02 Javascript
jQuery获取单选按钮radio选中值与去除所有radio选中状态的方法
May 20 #jQuery
node.js 中间件express-session使用详解
May 20 #Javascript
JS 调试中常见的报错问题解决方法
May 20 #Javascript
详解使用angular-cli发布i18n多国语言Angular应用
May 20 #Javascript
ztree实现权限横向显示功能
May 20 #Javascript
神级程序员JavaScript300行代码搞定汉字转拼音
May 20 #Javascript
在使用JSON格式处理数据时应该注意的问题小结
May 20 #Javascript
You might like
关于mysql字符集设置了character_set_client=binary 在gbk情况下会出现表描述是乱码的情况
2013/01/06 PHP
执行、获取远程代码返回:file_get_contents 超时处理的问题详解
2013/06/25 PHP
CI框架中libraries,helpers,hooks文件夹详细说明
2014/06/10 PHP
PHP四种基本排序算法示例
2015/04/09 PHP
PHP编译configure时常见错误的总结
2017/08/17 PHP
PHP7如何开启Opcode打造强悍性能详解
2018/05/11 PHP
PHP实现文件上传操作和封装
2020/03/04 PHP
splice slice区别
2006/10/09 Javascript
50款非常棒的 jQuery 插件分享
2012/03/29 Javascript
div模拟滚动条效果示例代码
2013/10/16 Javascript
javascript常见用法总结
2014/05/22 Javascript
JQuery拖动表头边框线调整表格列宽效果代码
2014/09/10 Javascript
js实现网页随机切换背景图片的方法
2014/11/01 Javascript
jQuery消息提示框插件Tipso
2015/05/04 Javascript
JavaScript中字符串与Unicode编码互相转换的实现方法
2015/12/18 Javascript
json与jsonp知识小结(推荐)
2016/08/16 Javascript
jquery validate表单验证插件
2016/09/06 Javascript
Vue.js学习之计算属性
2017/01/22 Javascript
初试vue-cli使用HBuilderx打包app的坑
2019/07/17 Javascript
在vue中阻止浏览器后退的实例
2019/11/06 Javascript
Vue+Element实现网页版个人简历系统(推荐)
2019/12/31 Javascript
使用Python抓取模板之家的CSS模板
2015/03/16 Python
深入理解Python对Json的解析
2017/02/14 Python
Python实现1-9数组形成的结果为100的所有运算式的示例
2017/11/03 Python
详解Django定时任务模块设计与实践
2019/07/24 Python
初次部署django+gunicorn+nginx的方法步骤
2019/09/11 Python
Pycharm使用远程linux服务器conda/python环境在本地运行的方法(图解))
2019/12/09 Python
Python面向对象原理与基础语法详解
2020/01/02 Python
Python 基于FIR实现Hilbert滤波器求信号包络详解
2020/02/26 Python
python GUI库图形界面开发之PyQt5结合Qt Designer创建信号与槽的详细方法与实例
2020/03/08 Python
美国蔬菜和植物种子公司:Burpee
2017/02/01 全球购物
澳大利亚厨房和家用电器购物网站:Bing Lee
2021/01/11 全球购物
工地资料员岗位职责
2013/12/31 职场文书
股东协议书
2014/04/14 职场文书
2014年后勤管理工作总结
2014/12/01 职场文书
vue组件冲突之引用另一个组件出现组件不显示的问题
2022/04/13 Vue.js