前言
上一篇介绍了gulp的四个API,本篇收集了gulp构建时的常用插件。参考这个博客中关于插件的介绍,根据自己的判断,有所删减,形成了这里的插件列表。
软件程序存在的意义,是为了简化我们的生活和工作,利用程序可以代替我们完成一些生活工作中重复性的活动。构建工具的存在也是这个目的,简化我们的程序开发流程,并在一定程度上规范我们的开发工作。我所知道的第一个前端构建工具是grunt,未及深入学习,出现了gulp,论坛评价一边倒地赞扬gulp的优秀。最近又出现了webpack,替代browserify,目标是成为一个统一JavaScript前后端开发的构建工具,我也对webpack的官方文档做了一定学习,不过由于webpack和react贴得更近一些,而我暂时并未介入react及react native的学习开发,因此对其暂时搁置一段时间。个人认为webpack暂时不能完全取代gulp和grunt在前端构建的地位。因此今天就深入学习实践了一下gulp。
参考博客gulp详细入门教程,里面介绍很详细。还有一个很重要的工具cnpm
本篇主要对gulp的API进行介绍,gulp的API页面里有更多黑科技。gulp有4个API,分别是gulp.task,gulp.src,gulp.dest和gulp.watch,我们使用这四个API和众多的插件完成前端项目的构建工作。构建工作的开始当然是配置gulpfile.js文件了,这个文件在整个项目的根目录下面,我们接下来的代码全部是写在gulpfile.js中。
电脑之前坏了,拿去修理了。修理之后,重做了系统。重做了系统之后,原本的数据就都没有了。当然也包括github的ssh指纹。因此,想要用ssh推送项目的话,就需要做一些ssh配置工作。
但是呢,我这个人懒,当需要在推送我的的轮子autocomplete的时候,就直接使用了https进行项目推送了。然而,出来混总是要还的,我受不了每次都输入用户名密码啊,思来想去,还是重新配置了一下ssh推送,并且博客的configuration就使用的ssh,方便推送博客么。
既然ssh已经配置好了,那我的轮子项目也想要通过ssh推送了,人之常情。初始化的时候,我将远程设置成了这样的:
1 | $ git remote add origin https://github.com/xdushepherd/autocomeplete-0-1.git |
那么问题来了,我要怎么才能ssh推送呢,通过度娘加上我的拓展,总结如下:
1 | $ git push git@github.com:xdushepherd/autocomplete-0-1.git |
1 | $ //方法一: |
1 | $ git remote ori git@github.com:xdushepherd/autocomplete-0-1.git |
我大概能记得住的方法就这么多了。
require(‘http’)方法可以得到HTTP服务器模块。
Node.js中的HTTP接口被设计来支持许多该协议的特点,而这些特点传统上对我们来说使用起来时比较麻烦的。这个接口注重的是不缓存整个请求或者响应。开发者可以实现数据流的传输。
HTTP消息的头部时这样一个对象:
1 | { 'content-length': '123', |
健的值是小写的。值时未修改的。
为了支持所有的可能的HTTP应用。Node.js中HTTP的API事一个非常底层的接口。这个API处理流数据并且可以完成消息的解析。这个接口可以将一个消息解析成一个头部和主体部分的两个消息,但是,这个接口不回解析真正的头部或者主体部分。
默认的头部允许一些键有多个值,这些值有’,’分隔开来,除了set-cookie和cookie,这两个键的值时存在一个数组中的。
像content-length这样的键智能有一个值。
原生的headers事保存在rawHeaders属性中,这个属性是这样的一个数组:[key,value,key2,value2,…]。举个例子,上面的那个消息头对象可以有下面这样一个rawHeaders列表:
1 | [ 'ConTent-Length', '123456', |
使用require(‘dns’)来获取这个模块。这个模块包含了分别属于两个类别的函数。
第一种,使用操作系统提供的一些服务来完成域名解析的工作,不需要任何网络交流工作。这个目录包含一个函数,那就是dns.lookup()。
这是一个解析www.google.com网址的例子1
2
3
4
5var dns = require('dns');
dns.lookup('www.google.com', function onLookup(err, addresses, family) {
console.log('addresses:', addresses);
});
V8引擎自带了一个扩展的debugger,这个调试工具可以通过简单的TCP协议实现在进程外访问程序。Node.js为这个调试器实现了一个内建的客户端。想要使用这个客户端,你只需要在在Node.js文件执行时添加一个debug参数就可以;
1 | $node debug myscript.js |
许多Node.js中的对象都可以触发事件:一个net.Server对象会在每一次有会话连接到它的时候出发一个事件。一个fs.readStream对象会在一个文件打开的时候触发一个事件。所有可以触发事件的对象都是events.EventEmitter的实例。你可以通过require(‘events’)方法得到这个模块。
一般而言,事件的名字是一个驼峰形的字符串,但是,这也不是硬性的规定,所以任何形式的字符串都可以作为事件的名字。
使用require(‘events’)来获取EventEmitter类。1
2var EventEmitter = require('events').EventEmitter;//导入events模块
var event = new EventEmitter(); //创建一个EventEmitter的实例对象
Node.js拥有一套简单的模块加载系统。在Node.js中,文件和模块之间是一一对应的关系。在接下来的例子中,foo.js和circle.js处于同一个文件夹下面,以foo.js文件夹在模块circle.js模块为例,展示一下模块加载机制。
foo.js中的内容:1
2var circle = require('./circle.js');
console.log('The area of a circle of radius 4 is' + circle.area(4));
circle.js的内容:1
2
3
4
5
6
7
8
9var PI= Math.PI;
exports.area = function(r){
return PI * r * r;
}
exports.circumference = function(r){
return 2 * PI * r;
}
ROM(只读存储器),ROM所存数据,一般是装入整机前事先写好的,整机工作过程中只能读出,而不像随机存储器那样能快速地、方便地加以改写。ROM所存数据稳定 ,断电后所存数据也不会改变;其结构较简单,读出较方便,因而常用于存储各种固定程序和数据。
RAM(随机存储存储器),又称作“随机存储器”,是与CPU直接交换数据的内部存储器,也叫主存(内存)。它可以随时读写,而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储媒介。存储单元的内容可按需随意取出或存入,且存取的速度与存储单元的位置无关的存储器。这种存储器在断电时将丢失其存储内容,故主要用于存储短时间使用的程序。
BIOS(Basic Input Output System:基本输入输出系统),它是一组固化到计算机内主板上一个ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、开机后自检程序和系统自启动程序,它可从CMOS中读写系统设置的具体信息。 其主要功能是为计算机提供最底层的、最直接的硬件设置和控制。当今,此系统已成为一些病毒木马的目标。一旦此系统被破坏,其后果不堪设想。