自定义插件
要实现一个自定义的 Gulp 插件来读取文件内容并替换其中的 “abc” 为 “efg”,你可以使用 Node.js 的 stream.Transform 类来创建一个转换流。以下是一个示例代码:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 
 | const { Transform } = require('stream');const through = require('through2');
 const PluginError = require('plugin-error');
 
 
 
 function gulpReplace() {
 return through.obj(function(file, encoding, callback) {
 if (file.isNull()) {
 return callback(null, file);
 }
 
 if (file.isStream()) {
 return callback(new PluginError(PLUGIN_NAME, 'Streaming not supported'));
 }
 
 if (file.isBuffer()) {
 try {
 let contents = file.contents.toString();
 contents = contents.replace(/abc/g, 'efg');
 file.contents = Buffer.from(contents);
 this.push(file);
 } catch (error) {
 return callback(new PluginError(PLUGIN_NAME, error));
 }
 }
 
 callback(null, file);
 });
 }
 
 
 
 function replaceA() {
 return new Transform({
 objectMode: true,
 transform(file, encoding, callback) {
 file.contents = Buffer.from(file.contents.toString().replace(/index/g, 'idx'))
 callback(null, file);
 }
 });
 }
 
 
 
 const gulp = require('gulp');
 
 gulp.task('replace', function() {
 return gulp.src('src/*.txt')
 .pipe(gulpReplace())
 .pipe(gulp.dest('dist/'));
 });
 
 | 
在上面的示例中,我们首先引入了 stream.Transform 类。然后,我们定义了一个名为 replaceABC 的函数,它返回一个转换流。在转换流的 transform 方法中,我们将接收到的数据块转换为字符串,并使用正则表达式 /abc/g 将其中的 “abc” 替换为 “efg”。然后,我们通过 this.push(data) 将转换后的数据块推送到流中,并通过 callback() 表示转换完成。
在使用示例中,我们使用 Gulp 的 gulp.src 方法选择要处理的文件,然后通过 pipe 方法将文件流传递给 replaceABC 转换流进行处理。最后,我们使用 gulp.dest 方法将处理后的文件保存到目标目录中。
自定义插件
https://gulpjs.com/docs/en/getting-started/using-plugins
gulp 常见配置参考
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 
 | const gulp = require('gulp');const concat = require('gulp-concat');
 const uglify = require('gulp-uglify');
 const cleanCSS = require('gulp-clean-css');
 const imagemin = require('gulp-imagemin');
 const htmlmin = require('gulp-htmlmin');
 const less = require('gulp-less');
 var clean = require('gulp-clean');
 
 
 gulp.task('scripts', function() {
 return gulp.src('src/js/*.js')
 .pipe(concat('bundle.js'))
 .pipe(uglify())
 .pipe(gulp.dest('dist/js'));
 });
 
 
 gulp.task('styles', function() {
 return gulp.src('src/css/*.css')
 .pipe(concat('styles.css'))
 .pipe(cleanCSS())
 .pipe(gulp.dest('dist/css'));
 });
 
 gulp.task('less', function() {
 return gulp.src('src/less/*.less')
 .pipe(less())
 .pipe(gulp.dest('dist/css'));
 });
 
 
 gulp.task('images', function() {
 return gulp.src('src/images/*')
 .pipe(imagemin())
 .pipe(gulp.dest('dist/images'));
 });
 
 
 gulp.task('html', function() {
 return gulp.src('src/*.html')
 .pipe(htmlmin({ collapseWhitespace: true }))
 .pipe(gulp.dest('dist'));
 });
 
 gulp.task('clean', function() {
 return .src('app/tmp/index.js')
 .pipe(clean({force: true}))
 .pipe(gulp.dest('dist'));
 });
 
 
 
 gulp.task('default', gulp.server('clean', gulp.parallel('scripts', 'styles', 'images', 'html')));
 
 | 
使用Node监听文件流操作完成
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 
 | gulp.task('getTitles', (done) => {let titles = [];
 
 gulp.src('./js/*.js')
 .pipe(replace(/(?<=\$t\([\"\']).+?(?=[\"\'][\)\,])/g, function handleReplace(match) {
 console.log('match:', match);
 titles = [...titles, match];
 return `i18n_${Md5(match)}`;
 }))
 .pipe(gulp.dest('./dist/js'))
 .on('end', function() {
 
 console.log('File processing completed');
 
 done();
 });
 });
 
 | 
gulp常用插件
- gulp-concat:用于合并多个文件为一个文件。
- gulp-uglify:用于压缩 JavaScript 文件。
- gulp-clean-css:用于压缩 CSS 文件。
- gulp-imagemin:用于压缩图片文件。
- gulp-htmlmin:用于压缩 HTML 代码。
- gulp-sass:用于编译 Sass 文件为 CSS 文件。
- gulp-autoprefixer:用于自动添加 CSS 前缀。
- gulp-babel:用于将 ES6+ 代码转换为 ES5 代码。
- gulp-rename:用于重命名文件。
- gulp-sourcemaps:用于生成源映射文件,方便调试压缩后的代码。
- gulp-watch:用于监视文件变化并执行相应任务。
- gulp-livereload:用于自动刷新浏览器。
- gulp-rev:用于给文件名添加哈希值,用于缓存处理。
- gulp-rev-replace:用于替换 HTML 文件中的引用路径,以匹配哈希值。
- gulp-notify:用于在任务完成时发送通知。
- gulp-clean  删除文件夹