通过Anuglar Material串串学客户端开发 - javascript编译和gulpfile.js
Angular Material不仅仅有本身框架的源代码,还有在这个框架上实现的一个应用docs。更为强大的是,这个应用是真正的产品网站:就是它的官网。我有理由相信,这个网站是从源代码直接发布的,从网址的最后那个
/latest,我们可以看出端倪。
从这个产品本身入手不失为学习的捷径。
入口gulpfile.js
C/C#命令行的应用,我们会寻找Main()方法;C#的Web应用我们会找Global.asax;那么一个NodeJS应用我们就要找gulpfile.js。
注意:以前的很多项目都是用gruntjs,而近期趋势是转向gulpjs,我自己的感觉也是gulpjs很好理解,性能也不错。
和前两个不同的是,gulp.js其实不是应用运行的入口,而是项目编译的入口。gulp就相当于微软的MSBuild用来定义编译任务。
Javascript也有编译
编译,JS文件还要编译?是的,如果你对客户端应用的印象还停留在html文件中直接引用你写的JS文件,那就已经大大落伍了。至少,很多的javascript的框架项目,如jQuery, AngularJS等等,都有编译的过程。虽然,这个编译和我们编译型语言(如C,C#等)的编译技术有些不同,但是角色是一样的:由于编译过程的存在,使得我们的开发环境和产品环境隔离,这种隔离也是一种解耦。
编译即解耦
解耦带来的价值就是,我们可以自由安排开发时的文件结构,而不要过多考虑产品文件结构的需求。比如:开发时我们更希望根据模块和责任的划分,分别对应不同的文件(文件越多越好),而产品阶段,则希望内容集中(文件越少越好)。对应这个情况,javascript就有一个编译步骤concatenate(合并文件)。从实现技术上看,这没有什么神奇的东西,但是这完全体现了编译的本质。
两个gulpfile.js文件
然而,编译不是Gulp的关键词,Gulp的关键词是任务(task),更多时候我把它和Ant/nAnt对等来看。
回到Angular Material的源代码来。我发现它居然有两个Gulp.js文件。一个在根目录,另外一个docs/gulpfile.js。从这我在了解到,他其实是两个项目,一个是material框架,另外一个是它的官网。它两部分代码写到有一个代码库,而且因为它官网本身也使用了material框架,甚至有一部分内容都是从框架中自动生成的,也是为什么写到一个代码库的理由。
然而,两个编译文件暴露了它是两个项目的事实,至少是两个发布(发布和项目的区别?)。 两个发布就是两个产品,又一次印证了编译是开发和产品的解耦器!
module.exports
然而,第二个编译文件docs/gulpfile.js中却看到了一个奇怪的东西module.exports = function(gulp, IS_RELEASE_BUILD) {。
module.exports是什么东西呢?
通过Anuglar Material串串学客户端开发 - javascript编译和gulpfile.js的更多相关文章
- 通过Anuglar Material串串学客户端开发 - NodeJS模块机制之Module.Exports
module.exports 前文讲到在Angular Material的第二个编译文件docs/gulpfile.js中却看到了一个奇怪的东西module.exports那么module.expor ...
- 第十一章 前端开发-JavaScript
第十一章 前端开发-JavaScript 11.3.1 js引入方式 行内样式 <p id="" class="" style="" ...
- 学Android开发,入门语言java知识点
学Android开发,入门语言java知识点 Android是一种以Linux为基础的开源码操作系统,主要使用于便携设备,而linux是用c语言和少量汇编语言写成的,如果你想研究Android,就去学 ...
- [原创]上海好买基金招高级Java技术经理/运维主管/高级无线客户端开发等职位(内推)
[原创]上海好买基金招高级Java技术经理/运维主管/高级无线客户端开发等职位(内推) 内部推荐职位 高级JAVA技术经理: 岗位职责: 负责项目管理(技术方向),按照产品开发流 ,带领研发团队,制定 ...
- CSharp程序员学Android开发---3.Android内部元素不填充BUG
最近公司组织项目组成员开发一个Android项目的Demo,之前没有人有Andoid方面的开发经验,都是开发C#的. 虽说项目要求并不是很高,但是对于没有这方面经验的人来说,第一步是最困难的. 项目历 ...
- CSharp程序员学Android开发---2.个人总结的快捷键
最近公司组织项目组成员开发一个Android项目的Demo,之前没有人有Andoid方面的开发经验,都是开发C#的. 虽说项目要求并不是很高,但是对于没有这方面经验的人来说,第一步是最困难的. 项目历 ...
- CSharp程序员学Android开发---1.初识AndriodIDE,掌握工具使用
最近公司组织项目组成员开发一个Android项目的Demo,之前没有人有Andoid方面的开发经验,都是开发C#的. 虽说项目要求并不是很高,但是对于没有这方面经验的人来说,第一步是最困难的. 项目历 ...
- ASP.NET5之客户端开发:Grunt和Gulp构建工具在Visual Studio 2015中的高效的应用
Grunt和Gulp是Javascript世界里的用来做自动压缩.Typescript编译.代码质量lint工具.css预处理器的构建工具,它帮助开发者处理客户端开发中的一些烦操重复性的工作.Grun ...
- 前端开发JavaScript入门——JavaScript介绍&基本数据类型
JavaScript 诞生于1995年,它的出现主要是用于处理网页中的 前端验证. • 所谓的前端验证,就是指检查用户输入的内容是否符合一定的 规则. • 比如:用户名的长度,密码的长度,邮箱的格式等 ...
随机推荐
- UVa 445 - Marvelous Mazes
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=94&page=s ...
- Android WebView 实现缓存网页数据
WebView中存在着两种缓存:网页数据缓存(存储打开过的页面及资源),H5缓存(即AppCache). 将我们浏览过的网页url已经网页文件(css.图片.js等)保存到数据库表中 缓存模式(5种) ...
- vim global命令
global命令格式 : [range]global/{pattern}/{command} global命令在[range]指定的文本范围内(缺省为整个文件)查找{pattern},然后对匹配到的行 ...
- python 内置函数 map filter reduce lambda
map(函数名,可遍历迭代的对象) # 列组元素全加 10 # map(需要做什么的函数,遍历迭代对象)函数 map()遍历序列得到一个列表,列表的序号和个数和原来一样 l = [2,3,4,5,6, ...
- 搭建三层架构(ASP.NET MVC+EF)
昨天面试的时候最后做了一道上机题,竟然跪了,跪就跪在没有搭好框架,连接数据库总是程序报错. 回来之后亲自搭了一下框架,弄好后放到博客上.下图就是搭建好后,整个框架的结构就是这样,下面对框架中的文件进行 ...
- Dell R710、720等系列类服务器 U盘安装centos6.5 操作系统
一般全新服务器创建系统的时候,没做raid 会报错,如下: 解决: 开机启动时按F10,进入下面界面. 在LC设置-语言和键盘设置选项里可以选择界面显示的语言 在界面主页选项里选择"配置RA ...
- 开始学CI
未来一段时间的学习计划 1.codeIgniter 2.angular JS 深入 3.react 4.python 边工作边学习,保持进步
- matlab微分方程dsolve使用
y=dsolve('Dy=exp(-x-y-2)','y(0)=-2','x') dy/dx 写成Dy (注意大小写) y(0)=-2 表示初始条件 'x'表示积分变量
- linux下如何查找需要的文件后并删除
1.首先查找指定目录下的文件,默认为当前目录 使用命令:find . -name 'a.txt' 会得到当前目录下所有包括子孙目录下的所有后缀为txt的文件 2.查找后删除 使用命令:find . - ...
- zabbix监控tomcat
服务端配置修改 编译zabbix的时候需要添加参数--enable-java --enable-java 修改zabbix_java配置文件 vim /usr/local/zabbix-2.4.6/s ...