<b>前提:</b>因为公司的静态资源保存在某云上,要求文件名不能包含大写字母,所以需要在前端的构建上进行文件检查。
<b>工具:</b>gulp + gulp-rename 即可实现,剩余的插件是顺序执行(run-sequence)缓存(gulp-changed),log提示(gulp-util)。
<b>原理:</b>使用gulp.src拿到文件,使用rename拿到文件名,用正则进行匹配,返回结果,再结束任务就行啦。
具体源码如下:
var gulp = require('gulp'),
uppercaseCount = 0,
rename = require('gulp-rename'),
gutil = require('gulp-util'),
changed = require('gulp-changed'),
runSequence = require('run-sequence');
//源文件路径
var sourcePath = 'content/hybrid/';
var paths = {
styles: sourcePath + 'styles/**/*.css',
images: sourcePath + 'images/**/*.{jpg,png,gif}',
};
//正则匹配大小写,并打印文件名
function Check_uppercase(path) {
if (/[A-Z]/.test(path.dirname) || /[A-Z]/.test(path.basename) || /[A-Z]/.test(path.extname)) {
gutil.log(gutil.colors.magenta(path.dirname + '/' + path.basename + path.extname));
return 'true';
}
}
//分目录检查
gulp.task('checkUppercase-img', function() {
return gulp.src(paths.images).pipe(changed(paths.images)).pipe(rename(function(path) {
if (Check_uppercase(path)) {
uppercaseCount = uppercaseCount + 1;
}
}));
});
gulp.task('checkUppercase-css', function() {
return gulp.src(paths.styles).pipe(changed(paths.styles)).pipe(rename(function(path) {
if (Check_uppercase(path)) {
uppercaseCount = uppercaseCount + 1;
}
}));
});
//顺序进行并调用
gulp.task('checkUppercase', function() {
runSequence('checkUppercase-img', 'checkUppercase-css', function() {
if (uppercaseCount > 0) {
gutil.log(gutil.colors.magenta('文件有大写,请修改重试~'));
process.exit(1);
}
});
});
网友评论