本文测试环境 gulp 3.9.1, Node.js v6.1.0
今天被gulp坑了不少时间,一个简单的 gulp.src 和 gulp.dest 操作竟然结果不一样,原来 gulp.src 中glob的不同竟然会影响 gulp.dest 中目标文件夹的结构。
假设在源代码文件夹中有这样的目录:
css/ b/ b.css a.css 如果在 src glob中 ** 前包含 css 如下:
gulp.task('css', function() { let dest = '../dist'; return gulp.src(['css/**/*.css']) .pipe(changed(dest)) .pipe(debug()) //gulp-debug .pipe(cleanCSS({compatibility: 'ie8'})) //gulp-clean-css .pipe(gulp.dest(dest)); }); 运行后,目标文件夹内不会保留源目录中最外的 css 文件夹,类似这样:
dist/ b/ b.css a.css 但如果glob中的 ** 在最前(注意这样可能会匹配到其他不相关文件,可以做一些屏蔽比如 node_modules 文件夹),最外的 css 文件夹就会保留,代码如下:
gulp.task('css', function() { let dest = '../dist'; return gulp.src(['./**/*.css', '!./node_modules/**']) .pipe(changed(dest)) .pipe(debug()) //gulp-debug .pipe(cleanCSS({compatibility: 'ie8'})) //gulp-clean-css .pipe(gulp.dest(dest)); }); 运行后的 dist 目录:
dist/ css/ b/ b.css a.css