让 Angular 1.x 跟上时代的步伐

Worktile 的前端构建之路

2013年,那时候 Angular.js 才刚刚兴起,我们大胆了选择了当时看来比较新的技术,经过 3年的技术积累,Worktile
团队基本上把 Angular 1.x 可能踩得坑都踩了一遍,我们自己也写了一些关于 Angular.js 的插件,可以说团队目前采用
Angular.js 开发项目没有太大的技术难点。

Worktile 刚开始的时候是自己用 Node.js 写脚本进行合并和压缩 JS 代码,现在想想当时是多么的原始,后来切换到 Grunt
工具进行简单的合并压缩,编译 LESS,使用 Grunt 一段时间之后发现其打包的速度实在太慢,当做企业版的时候就切换到 Gulp
上了,在速度上的确有质的飞跃,使用 Gulp 的时候我们做了稍微复杂一点的任务构建,开发环境自动监控 LESS 代码变化等等,目前一直使用的是
Gulp,我们也在不停的跟随时代的变化,保持自己永不落后,所以在一些边缘项目上也会使用最近比较火的框架、类库或者工具。

Angular 1.x 使用模块化

大家都知道 Angular 1.x 有自己的一套模块机制,定义一个模块如下:


  1. angular.module("module.abc", ["module.def"]); 

上面的代码定义了一个 "module.abc" 模块,并且 "module.abc" 依赖 "module.def"
模块,然而这个模块机制很容易写出有文件顺序依赖的代码,比如 a.js 文件定义了一个 "module.abc" 模块,b.js
没有定义自己的模块,而是直接使用了 "module.abc",这样 b.js 必须在 a.js
加载之后才能工作,如果有了文件的先后依赖,合并的时候就需要手动维护一个顺序列表。所以说 Angular.js
的模块机制没有解决JS文件依赖关系和JS文件异步加载的问题。

现在大家谈起前端的模块化,之前很多选择让人眼花缭乱,比如
CommonJS,AMD(Require.js),CMD(Sea.js),UMD,从未来标准的角度首选 ES6
Modules,不要为我为什么,关于如果在Angular 1.x 使用 ES6 的
Modules,网上有很多文章介绍怎么使用,推荐一篇前端大叔徐飞的博客,这里就不详细的一一展开了。

谈到这里大家或许会问:如果使用 Require.js ,在开发阶段是每个 JS 都动态加载的,生产环境根据 r.js 这样的工具合并成一个或者多个JS来提高前端性能,如果使用 ES6 的Modules,开发环境和生产环境是怎么样的呢?

在生产环境每个js文件都动态加载显然不是最合适,中小型项目基本不需要动态加载,我觉得合并成1个或者多个js是最好的解决方案。

那怎么合并 ES6 Modules 的JS,这类的工具很多很多,包括下面要介绍的 Webpack(目前1.x版本还不能原生支持,需要借助
Babel 工具),基本上开发环境也使用合并之后的 Bundle JS,调试使用 Source Map
工具,如果你开发环境就不想使用合并之后的,systemjs也是个不错的选择。

ES2015(ES6)

如果可以,尽快使用,因为他是 Javascript 未来的标准,作为一个前端技术人员,如果不能与时俱进那就只能等着淘汰,ES 2015
有着现代语言的语法,解决了 Javascript 语言层面上的很多问题,有 Class,Modules,Arrows,Template
Strings
等等一系列的新特性,用了之后腰不酸腿不痛(请一定要相信我),最终的目的只有一个:提高生产力,让代码更简单,当然现在很多浏览器还不能原生支持
ES2015,没关系,有Babel在,生产环境转换好成 ES5 不是问题。

其实 ES 2015 的新特性数也能数出来,稍微花上 1 天就全学会了,推荐2个地址:

Webpack

Webpack 是最近1-2年来非常火的构建工具,如果说前端工程师没有听过或者尝试下 Webpack
,简直会被嫌弃,当然工具之所以火当然有他的道理,在我看来他能解决很多模块化和工程化的问题,提高生产力,如果你还不知道 Webpack
是什么,赶紧花几个小时去了解下,了解之后不要不了了之,结合自己的项目,切换到 Webpack
是否可行,如果可行,接下来怎么完美过渡,即使目前不用,下一个项目开始的时候试着尝试下。

Webpack 的优点:

  • 支持CommonJS 和AMD 模块,ES 2015 Modules 在 2.0 中将会原生支持,这个问题不大,因为我们肯定要使用 Babel 的;
  • 模块加载器,能够处理一切资源,包括 CSS,LESS,Image,JSON 等等,比如使用 babel-loader 加载器让我们能够用ES6的语法来编写代码;
  • Code Spliting,可以通过配置打包成多个文件,有效的利用浏览器的缓存功能提升性能,并且能自动抽取多个入口公用的代码;

插件机制提供了更多扩展功能,弥补 Loaders 的不足,比如自带的 UglifyJsPlugin 压缩代码。

Angular 1.x + ES2015 + Webpack Seed

说了那么多,我都有点烦了,直接上代码 https://github.com/why520craz...

这是我写的一个怎么使用 Angular 1.x + ES2015 + Webpack 的一个示例项目,基本上是我目前水平觉得比较好的组织形式了,里面涵盖了:

  • 使用 ES6 Modules 进行 Angular 1.x 的模块化开发;
  • 使用全组件化开发一个简单的 Angular 1.x 单页项目;
  • 使用 Webpack 合并 JS,CSS,Image 等一切静态资源;
  • 包管理工具使用 NPM,任务的启动脚本使用 NPM Scripts;
  • 使用 Webpack 的 CommonsChunkPlugin 将引用的第三方类库单独打包成一个独立的 bundle,并把多个入口公用的JS抽取出独立的 bundle;
  • 使用 HtmlWebpackPlugin 插件生成入口的HTML文件,并把打包之后的JS和CSS引入到HTML中,不需要手动添加 scripts 标签和 style link;
  • 使用 ExtractTextPlugin 插件把 CSS 抽取成独立的文件,当然你也可以不这么做,直接放在 JS 中;
  • 使用 postcss 处理样式的兼容性问题,autoprefixer 自动追加前缀等。

Webpack 还有一些更高级的特性没有在示例中展现,比如通过dllplugin只将有变化的JS生成不同的 Hash,充分利用浏览器的缓存,频繁打包部署后,没有改动的类库将不会重新生成。

前端开发远不止于此,有人总结了前端开发的四个阶段:

  • 库/框架选型;
  • 简单构建优化;
  • 模块化开发;
  • 组件化开发与资源管理。

大部分团队还是停留在第二第三阶段,每个阶段的实现都有很多种选择。

如果只想达到第二阶段,那么选择一个压缩合并工具几分钟可能就能实现,具体任务是使用 Grunt,Gulp,还是 NPM Scripts 都可以;

第三阶段就需要代码级别的支持,选择 Webpack 原生支持 CommonJS,AMD 写法,不需要单独引入 Require.js 或者
Sea.js 这样的类库, 省去了很多麻烦,你也可以选择其他的支持模块化的构建工具:systemjs,Browserify,
或者rollup;

第四阶段的组件化开发和资源管理暂时就不讨论了,关于是全组件开发和半组件开发也有很多争议。

总结

时至今日,谈起 Angular.js ,或许有些人都觉得有些过时,人人都在谈 React,Vue。当然 Angular 2
经过一些波折之后也在逐渐走进我们的视线,其实最终哪个框架会一统天下谁都没法预料。但也有些前端大牛认为 Angular.js
在某些行业或者企业才刚刚兴起!

不得不承认 Angular 1 有很多问题,如果你的项目之前选择的是 Angular.js ,不是一拍脑袋就升级 Angular 2
的,即使不升级,我们也可以在 Angular 1.x 的基础上做一些工作来适应未来的变化,慢慢的哪一天你就会突然发现升级就是那么的简单。

希望这篇文章能够激起大家永远保持积极向前追求完美代码的心,不仅对自己的成长也会对公司带来无限的价值。对了!虽然Webpack 只是一个工具,但目前来看应该是个不错的工具,值得前端的朋友去学习,因为使用了他的确使前端的开发更简单了。

最后的内心OS篇

其实这篇文章来源于我在公司内部的一个分享前端构建工具 - Webpack

分享的时候主要是现场撸代码,通过博客的话就不好展现了,所以我基本上没有介绍 Webpack
入门的一些用法,并且网上已经有很多大牛的分享,推荐大家看一下Webpack 教程资源收集,这里面基本涵盖了各路大神,从入门到精通全看一遍即可,
如果你的英文足够好,请直接看 Webpack 官方文档~

作者:Worktile

来源:51CTO

时间: 2024-11-17 01:06:45

让 Angular 1.x 跟上时代的步伐的相关文章

云计算让电子政务跟上时代的步伐

云是湿的 从组织的角度看云计算,会看出什么新东西? 组织有两类,一类是政府,一类是企业.云计算使IT对于它们来说,变成湿的. 首先说一说为什么云计算使IT对政府来说变湿. 今年2月,美国CIO委员会发布了<联邦http://www.aliyun.com/zixun/aggregation/13798.html">云计算战略>,提出"云优先"策略,推动联邦IT向云计算迁移,向云计算服务转变. "云优先"策略有许多看点,例如提出利用"

Web端的设计:让我们的web端产品跟上时代的脚步

文章描述:如今,随着智能手机.平板电脑等移动手持设备的普及,越来越多的Web网站都在向这些平台做兼容.同时,这些移动设备上的视觉设计与交互设计也在影响着Web端的设计. 如今,随着智能手机.平板电脑等移动手持设备的普及,越来越多的Web网站都在向这些平台做兼容.同时,这些移动设备上的视觉设计与交互设计也在影响着Web端的设计. 所以,现在我们的设计是不是要变得更加的popular一点呢?是不是可以总结出一些方法让我们的web端产品跟上时代的脚步呢?

任天堂终于进军手游,希望转变速度还能跟得上时代

[摘要]不久前,任天堂总裁岩田聪在投资者大会上发表了讲话,其中一个重点便是:任天堂暂时不会冒着毁掉经典游戏系列的风险,进军手游领域.但即便如此,任天堂并不认同"视频游戏悲观论",旗下众多出色的游戏品牌如<马里奥>.<塞尔达传说>.<口袋妖怪>等等,都是任天堂最为宝贵的财富. 任天堂联手DeNA进军移动游戏市场 前景几何? 不久前,任天堂总裁岩田聪在投资者大会上发表了讲话,其中一个重点便是:任天堂暂时不会冒着毁掉经典游戏系列的风险,进军手游领域.而在3

net-关于跟得上时代的网页开发技术

问题描述 关于跟得上时代的网页开发技术 现在都在用什么去做网页开发?现在开始学网页开发学PHP,.NET,JSP是不是更不上时代要求? 解决方案 现在网页的开发重点在前端,对前端交互甚至业务逻辑的要求越来越多. 比如angularjs knockoutjs react.js bootstrap,企业开发的extjs jqueryui easyui还有html5本身都很重要. 解决方案二: 要说跟得上时代的,那当然数html5了,可以用于开发手机网页.微信应用.APP应用,有空可以关注我运营的微信

i黑马:雅虎将对主页进行改版,提供“跟得上时代的体验”

i黑马消息:北京时间2月21日早,雅虎CEO玛丽莎·梅耶尔(Marissa Mayer)周三在公司博客中宣布,雅虎将对主页进行改版,提供"跟得上时代的体验". 曾几何时,大门户的网站模板就已经定型,但是用这种"毫无变化"的方式去应对"瞬息万变"的互联网明显是行不通的,这次雅虎在梅姑的带领下就决定对雅虎主页进行大修改.黑马哥总结了一下,雅虎的这次改版主要包括了三个重点. (1)性化新闻定制是改版的重点 雅虎本次改版的焦点在于新闻,让用户可以根据自己

纪鑫智:草根站长如何紧跟时代的步伐前进

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 我是一名名正言顺的草根站长,做为草根并非是最求利益,利益会使站长走错方向,同时也失去更多的机会和资源.我觉得站长要最求"永垂不朽"的精神,"永垂不朽"一般用于伟人而作为站长为什么需要最求这种精神?答案只有一个,为人民服务,只有互联网给大众有帮助才有存在的意义.互联网让我定义,我会定义为一种工具,而这种工

传统家电如何结合微软云跟上时代脚步

提高网络服务资源质量.节省 IT 成本,实现异地多点防灾备份 "服务器+IDC"是企业构建IT系统的基本模式,但是现在,模式正在改变.传统的服务器模式弊端显而易见,应用程序的工作负载不断变化,单一应用程序的服务器通常无法满足需求,而急剧增加的服务器数量,势必造成企业资金和运营成本的攀升.同时,越来越复杂的IT系统和数据中心也很难快速配置和有效管理,以满足不断变化的需求. 在每个IT遭遇瓶颈的时间节点,总有新的技术出现,以解决IT系统困境,而现在,云计算适时出现.云计算通过部署成千上万的

跟不上时代的黑莓该如何收拾残局

BlackBerry是第一款真正意义上的智能手机,但是它的智能手机却有很多潜藏的致命弱点,它的软件已经无法适应现在这个智能手机2.0时代了.在 2007年之前,纽约街头随处可以见到使用BlackBerry手机的用户,甚至是在星巴克排队买咖啡的等待过程中,都能见到几乎每个人都拿着BlackBerry,有的人在查看邮件,有的人在查看BBM.那时候的BlackBerry是身份的象征,几乎所有人都在使用.在2007年1月9日,苹果发布了iPhone,iPhone的发布给BlackBerry的时代终结埋下

增设大数据专业追上时代“风口”

日前,教育部公布了高校新增专业名单,有32所高校成为第二批成功申请"数据科学与大数据技术"本科新专业的高校.加上此前第一批成功申请该专业的北京大学.对外经济贸易大学和中南大学,已共有35所高校成功申请大数据专业. 大数据专业的产生背景,跟快速发展的互联网产业直接相关,正如报道中所言,"站在互联网风口上的大数据,直接催热了大学里的大数据专业".根据麦肯锡咨询公司出具的一份分析报告,预计到2018年,大数据或数据工作者的岗位需求将激增,其中大数据科学家的缺口在14万到1