doubleyong
管理员
管理员
  • 最后登录2025-12-02
  • 发帖数1198
  • 最爱沙发
  • 喜欢达人
  • 原创写手
  • 社区居民
  • 忠实会员
阅读:7497回复:0

Gulp插件使用经验总结

楼主#
更多 发布于:2017-05-22 13:31
正好前一阵没事去看了下nodejs相关的一些东西,了解了下模块加载、包管理相关的东西,正好也看到别人提到了gulp这个东西,看了下配置,觉得比grunt容易很多,很容易上手。


Gulp官网 Gulp插件

于是边学边用,经过几周的上手,终于配置了一套适合自己的工具。当然,这之前也从对gulp的一知半解到后来可以根据自己需求修改、编写插件,也遇到了不少的坑,所以今天就是来分享这些填坑经验的。
gulp-2x


1. 了解node中文件路径配置


gulp内建的.src .dest .watch等方法,传入的文件路径的解析是通过glob这个模块处理的,所以可以先去了解下这个路径字串格式的配置方法,这样子对自由组织选取文件操作很有帮助。

例如想要通过文件名排除某些文件的时候,就可以这样:

1. gulp.src('css/**/!(_)*'); //排除以_开头的文件
node-glob


2. .watch方法路径不要用 './xx'
用 './xx' 开头作为当前路径开始,会导致无法监测到新增文件,所以直接省略掉 './' 即可。'./images/*' === 'images/*'


3. .watch使用change事件来同步删除情况
网上看到的很多教程只有文件改变或者新增来自动处理这部分文件,但是删除了源文件,输出文件夹里的对应文件却没有相应的自动删除。其实可以通过change事件来检测删除情况


var watcher = gulp.watch('js/**/*.js', ['uglify','reload']);
watcher.on('change', function(event) {
 console.log('File ' + event.path + ' was ' + event.type + ', running tasks...');
});
event.type==deleted 时就可以对应处理删除情况,这里不再赘述删除文件的处理。


4. 使用gulp-changed来过滤变动的文件
var gulp = require('gulp');
var changed = require('gulp-changed');
var ngmin = require('gulp-ngmin'); // just as an example

var SRC = 'src/*.js';
var DEST = 'dist';

gulp.task('default', function () {
   return gulp.src(SRC)
       .pipe(changed(DEST))
       // ngmin will only get the files that
       // changed since the last time it was run
       .pipe(ngmin())
       .pipe(gulp.dest(DEST));
});
changed的参数中输出文件夹这一参数不能省,而且不能和源文件夹相同。gulp-watch 也可以实现类似效果,而且不需要指定输出文件夹,但是首次使用文件变动它无法正确处理到。

gulp-changed

5. 使用gulp-plumber来捕获处理任务中的错误
在gulp的管道流任务处理中,如果某个环节出了错,会导致整个任务中断,包括watch任务,这很麻烦。所以gulp-plumber来了。

var plumber = require('gulp-plumber');
var less= require('gulp-less');

gulp.src('./src/*.ext')
   .pipe(plumber())
   .pipe(less())
   .pipe(gulp.dest('./dist'));
gulp-plumber


6. 多个合并文件任务的处理方法
简单的项目中可能只需要合并处理一个js、css文件,但是复杂项目中需要合并处理的文件可能不止一个。css好说,好多合并插件都可以处理 @import ,而js该怎么处理呢?

一种办法是写死任务,有几个合并需求就在gulpfile.js里配置几个任务。我讨厌这种方法。

另一种就是我在用的方法, 将js合并的配置写到package.json里,比如我放到 minjs 这个字段下,我的gulpfule.js中关于js合并部分的代码如下:


var minijs=require("./package.json").minijs;
var concat=require("gulp-concat");
Object.keys(minijs).forEach(function(name){//合并压缩package.json里指定的文件
   gulp.task(name+'js', function() {
       return gulp.src(minijs[name])
           .pipe(concat(name+'.js'))
           .pipe(gulp.dest('dist/js'));
   });
});




原文:http://m.blog.csdn.net/article/details?id=50606149
知识需要管理,知识需要分享
游客


返回顶部

公众号

公众号