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的更多相关文章

  1. 通过Anuglar Material串串学客户端开发 - NodeJS模块机制之Module.Exports

    module.exports 前文讲到在Angular Material的第二个编译文件docs/gulpfile.js中却看到了一个奇怪的东西module.exports那么module.expor ...

  2. 第十一章 前端开发-JavaScript

    第十一章 前端开发-JavaScript 11.3.1 js引入方式 行内样式 <p id="" class="" style="" ...

  3. 学Android开发,入门语言java知识点

    学Android开发,入门语言java知识点 Android是一种以Linux为基础的开源码操作系统,主要使用于便携设备,而linux是用c语言和少量汇编语言写成的,如果你想研究Android,就去学 ...

  4. [原创]上海好买基金招高级Java技术经理/运维主管/高级无线客户端开发等职位(内推)

    [原创]上海好买基金招高级Java技术经理/运维主管/高级无线客户端开发等职位(内推) 内部推荐职位 高级JAVA技术经理: 岗位职责: 负责项目管理(技术方向),按照产品开发流 ,带领研发团队,制定 ...

  5. CSharp程序员学Android开发---3.Android内部元素不填充BUG

    最近公司组织项目组成员开发一个Android项目的Demo,之前没有人有Andoid方面的开发经验,都是开发C#的. 虽说项目要求并不是很高,但是对于没有这方面经验的人来说,第一步是最困难的. 项目历 ...

  6. CSharp程序员学Android开发---2.个人总结的快捷键

    最近公司组织项目组成员开发一个Android项目的Demo,之前没有人有Andoid方面的开发经验,都是开发C#的. 虽说项目要求并不是很高,但是对于没有这方面经验的人来说,第一步是最困难的. 项目历 ...

  7. CSharp程序员学Android开发---1.初识AndriodIDE,掌握工具使用

    最近公司组织项目组成员开发一个Android项目的Demo,之前没有人有Andoid方面的开发经验,都是开发C#的. 虽说项目要求并不是很高,但是对于没有这方面经验的人来说,第一步是最困难的. 项目历 ...

  8. ASP.NET5之客户端开发:Grunt和Gulp构建工具在Visual Studio 2015中的高效的应用

    Grunt和Gulp是Javascript世界里的用来做自动压缩.Typescript编译.代码质量lint工具.css预处理器的构建工具,它帮助开发者处理客户端开发中的一些烦操重复性的工作.Grun ...

  9. 前端开发JavaScript入门——JavaScript介绍&基本数据类型

    JavaScript 诞生于1995年,它的出现主要是用于处理网页中的 前端验证. • 所谓的前端验证,就是指检查用户输入的内容是否符合一定的 规则. • 比如:用户名的长度,密码的长度,邮箱的格式等 ...

随机推荐

  1. 获取ServletContext

    ServletConfig       config.getServletContext(): GenericServlet      this.getServletContext(); HttpSe ...

  2. linux C学习笔记04--内存映射

    内存映射代码,打开一个文件与映射到内存中,对内存和文件的修改都会反映到文件中来,反之亦然,先贴代码,以后再完善: /****************************************** ...

  3. 使用SftpDrive+SourceInsight阅读开源代码

    在虚拟机环境下使用Linux编写和阅读代码,我之前一直是通过Xshell利用ssh登录至虚拟机从而在命令行下使用vim来进行的.目前有阅读开源代码的需要,虽然vim+ctags+cscope可以完成这 ...

  4. php文章内容分页并生成相应的htm静态页面代码

    代码如下: <?php $url='test.php?1=1'; $contents="fjka;fjsa;#page#批量生成分成文件并且加上分页代码"; $ptext = ...

  5. 【MVC】 非常简单的页面导出 WORD, EXCEL方法

    [MVC] 页面导出 WORD, EXCEL 前端 js function output() { var para = new Object(); para.html = getHtml(" ...

  6. android之RadioGroup

    radioGroup这控件在开发中也是常用到的 RadioGroup 有时候比较有用.主要特征是给用户提供多选一机制. 用微信举一个例子吧! <?xml version="1.0&qu ...

  7. TFS与Eclipse、Microsoft Visual Studio等客户端以webservice进行交换。

    TFS与eclipse.Microsoft Visual Studio等客户端以webservice进行交互. 参考地址: http://server_ip:8080/tfs/项目区域/version ...

  8. AngularJS学习---Routing(路由) & Multiple Views(多个视图) step 7

    1.切换分支到step7,并启动项目 git checkout step- npm start 2.需求: 在步骤7之前,应用只给我们的用户提供了一个简单的界面(一张所有手机的列表),并且所有的模板代 ...

  9. [Office][C#] NPOI、OpenXML SDK、OpenOffice.org SDK 写入资料到 EXCEL 档案[转]

    原文地址:http://www.dotblogs.com.tw/chou/archive/2010/04/29/14912.aspx 一.簡介 要將資料寫入 EXCEL 檔案有許多的方法,但假如電腦不 ...

  10. SQlserver 行转列

    列转行编程中很容易碰到,小弟在此总结下, 行转列暂时还没遇到,遇到再补充. 列转行:  , , , ,  以上都是以逗号分隔,分隔符可以自定义.