Gulp

使用gulp进行基础的任务也是热心应手,但主要也是插件生态的完善,大量开发者的贡献。 那么其中 gulp 运行的原理,过程,怎么读取文件、写文件,反正是基于 Node ,所以对于了解 Node 也是有极大好处的。

vinyl 文件对象, buffer, stream流; 这些都是需要去认真了解的。

参考:

使用

gulp 可以说是开箱即用的。入手基本没难度。因为都是用别人写好的包嘛。😂😂😂

https://npms.io/ 通过各方面评价一个包的质量,通过npm官方的话,一般看下载量就知道了。
http://gulpjs.com/plugins/

基本的关键词:

  • task
  • src
  • pipe
  • dest
  • watch
    • change
    • end
    • error
    • ready
    • nomatch

src读取文件产生数据流,pipe 管道形式传输文件流,中间是任务处理,dest 输出写文件

src

Returns a stream of vinyl File objects.

Gulp 管道中的「流」不是操作 Strings 和 Buffers 的常规 Node.js 流,而是启用 object mode 的流。Gulp 中的流发送的是 vinyl 文件对象。

与常规流不同,gulp.src() 传输的流是把内容转换成 buffer 的 vinyl 文件对象,因此 gulp 中得到的不是数据块(chunk),而是包含 buffer 的虚拟文件。Vinyl 文件格式有一个 contents 属性来存放文件内容(buffer 或者 stream 或者 null)。

整个文件发射给 stream 之前,数据先被转换成 buffer,存放在 vinyl 文件对象中。再以流的形式运作。

vinyl :

Virtual file format ---- Vinyl is a very simple metadata object that describes a file.

https://github.com/gulpjs/vinyl 文件格式介绍
https://github.com/gulpjs/vinyl-fs Vinyl adapter: 每个文件源需要我所说的Vinyl Adapter来匹配到对应文件使用,一个简单的Vinyl Adapter 暴露了src(globs)和dest(folder)的方法。

blob :

在编程设计中,glob是一种模式,它使用通配符来指定文件名。 Match files using the patterns the shell uses, like stars and stuff.

https://github.com/isaacs/node-glob 以 JS 实现的匹配

匹配规则:

The following characters have special magic meaning when used in a path portion:

  • * Matches 0 or more characters in a single path portion
  • ? Matches 1 character
  • [...] Matches a range of characters, similar to a RegExp range. If the first character of the range is ! or ^ then it matches any character not in the range.
  • !(pattern|pattern|pattern) Matches anything that does not match any of the patterns provided.
  • ?(pattern|pattern|pattern) Matches zero or one occurrence of the patterns provided.
  • +(pattern|pattern|pattern) Matches one or more occurrences of the patterns provided.
  • *(a|b|c) Matches zero or more occurrences of the patterns provided
  • @(pattern|pat*|pat?erN) Matches exactly one of the patterns provided
  • ** If a "globstar" is alone in a path portion, then it matches zero or more directories and subdirectories searching for matches. It does not crawl symlinked directories.

Stream

  • buffer 为数据缓冲对象,是一个类似数组结构的对象,可以通过指定开始写入的位置及写入的数据长度,往其中写入二进制数据
  • stream 是对buffer对象的高级封装,其操作的底层还是buffer对象,stream可以设置为可读、可写,或者即可读也可写,在nodejs中继承了EventEmitter接口,可以监听读入、写入的过程。具体实现有文件流,httpresponse等~~

更多参考:

插件开发

官网得说明很明白

最后发现其实官网基本讲完了一切嘛。