文件操作#

src()dest() 方法由 gulp 提供,用于与计算机上的文件交互。

src() 接收一个 glob 以从文件系统中读取文件,并生成一个 Node 流。它定位所有匹配的文件并将它们读入内存以通过流传递。

src() 生成的流应该从任务中返回,以表示异步完成,如在 创建任务 中所述。

const { src, dest } = require('gulp');
exports.default = function() {
return src('src/*.js')
.pipe(dest('output/'));
}

流的主要API是用于链接Transform或Writable流的.pipe()方法。

const { src, dest } = require('gulp');
const babel = require('gulp-babel');
exports.default = function() {
return src('src/*.js')
.pipe(babel))
.pipe(dest('output/'));
}

dest() is given an output directory string and also produces a Node stream which is generally used as a terminator stream. When it receives a file passed through the pipeline, it writes the contents and other details out to the filesystem at a given directory. The symlink() method is also available and operates like dest(), but creates links instead of files (see symlink() for details).

Most often plugins will be placed between src() and dest() using the .pipe() method and will transform the files within the stream.

Adding files to the stream#

src() can also be placed in the middle of a pipeline to add files to the stream based on the given globs. The additional files will only be available to transformations later in the stream. If globs overlap, the files will be added again.

This can be useful for transpiling some files before adding plain JavaScript files to the pipeline and uglifying everything.

const { src, dest } = require('gulp');
const babel = require('gulp-babel');
const uglify = require('gulp-uglify');
exports.default = function() {
return src('src/*.js')
.pipe(babel))
.pipe(src('vendor/*.js'))
.pipe(uglify())
.pipe(dest('output/'));
}

分阶段输出#

dest() 可以在管道中间用于将中间状态写入文件系统。当接收到文件时,当前状态将写入文件系统,路径将更新以表示输出文件的新位置,然后该文件继续通过管道。

此功能可用于使用相同管道创建未压缩和已压缩文件。

const { src, dest } = require('gulp');
const babel = require('gulp-babel');
const uglify = require('gulp-uglify');
const rename = require('gulp-rename');
exports.default = function() {
return src('src/*.js')
.pipe(babel))
.pipe(src('vendor/*.js'))
.pipedest'output/'
.pipe(uglify())
.piperename extname '.min.js' }
.pipe(dest('output/'));
}

模式:流式、缓冲和空#

src() 可以在三种模式下运行:缓冲、流式和空。这些模式通过 src() 上的 bufferread 选项 进行配置。

  • 缓冲模式是默认模式,将文件内容加载到内存中。插件通常在缓冲模式下运行,许多插件不支持流式模式。
  • 流式模式主要用于处理无法一次性加载到内存中的大文件,如巨大的图像或电影。内容将从文件系统中以小块流式传输,而不是一次性加载。如果需要使用流式模式,请寻找支持该模式的插件或自行编写。
  • 空模式不包含任何内容,在仅处理文件元数据时非常有用。