gulp.src
输出(Emits)符合所提供的匹配模式(glob)或者匹配模式的数组(array of globs)的文件。 将返回一个 Vinyl files 的 stream 它可以被 piped 到别的插件中。
用法
gulp.src(globs[, options])
gulp.src('client/templates/*.jade')
.pipe(jade())
.pipe(minify())
.pipe(gulp.dest('build/minified_templates'));
参数
globs
描述:所要读取的 glob 或者包含 globs 的数组。
类型: String 或 Array
glob 请参考 node-glob 语法 或者,你也可以直接写文件的路径。
options
描述:通过 glob-stream 所传递给 node-glob 的参数。
类型: Object
除了 node-glob 和 glob-stream 所支持的参数外,gulp 增加了一些额外的选项参数:
options.buffer
描述:是否返回buffer,或者说是返回buffer(true)还是返回file_contents(false)。
类型: Boolean
默认值: true
如果该项被设置为 false,那么将会以 stream 方式返回 file.contents 而不是文件 buffer 的形式。这在处理一些大文件的时候将会很有用。注意:插件可能并不会实现对 stream 的支持。
options.read
描述:是否去读取文件的内容。
类型: Boolean
默认值: true
如果该项被设置为 false, 那么 file.contents 会返回空值(null),也就是并不会去读取文件。
options.base
描述:重新指定src的base,不好理解,具体看下面的解释。
类型: String
默认值: 将会加在 glob 之前 (请看 glob2base)
请想像一下在一个路径为 client/js/somedir 的目录中,有两个文件:1.js,2.js ,现在我们这样:
gulp.src('client/js/**/*.js')
上面匹配的结果是什么呢?会得到两个文件的路径和内容,路径是client/js/somedir/1.js
和client/js/somedir/2.js
,但对于gulp而言,这个时候的base是clien/js/
,也就是glob开始匹配之前的字符串。
如果不规定options.base,那么在后面的pipe中,就会以options.base='client/js/'
进行处理,比如我们在末尾执行.pipe(gulp.dest('dist/name/'))
,那么会得到两个文件:dist/name/somedir/1.js
和dist/name/somedir/2.js
。
但是有的时候我们想要的是dist/name/js/somedir/1.js
,而不是上面的文件路径。这个时候options.base就可以派上用场。
gulp.src('client/js/**/*.js',{
base: 'client'
})
.pipe(gulp.dest('dist/name'))
这样就可以得到想要的结果。
它这里面就有一个相对路径的感觉,比如它找到了client/js/somedir/1.js
,但是你设置了base字段为client
,所以它就会把client这个目录层级从client/js/somedir/1.js
中移除,剩下的部分就是js/somedir/1.js
,把这个部分放到dest规定的目录中去。
这就是gulp.src,赶紧动手去自己试试吧。