我有一个情况,即使已经压缩了所有JavaScript文件,我目前都在丑化所有JavaScript文件,这显然不是一个好主意。
我各自的任务是:
gulp.task('uglify', ['scripts'], function() {
return gulp.src('./js/scripts.js')
.pipe(rename({suffix: '.min'}))
.pipe(uglify({
mangle: false
}))
.pipe(gulp.dest('./js'));
});
scripts.js
是一个以前被串联在一起的文件,但是显然,如果那里已经有一些已经被压缩的文件,那么它们将再次被uglified。
因此,我进行了搜索,并一直在考虑再次处理所有文件,而不是从未启示的(刚包含串联文件的文件(版本中进行工作,以便我对每个文件有更多控制。
我研究使用gulp-ignore
和gulp-if
和gulp-if
似乎是我想要的。但是,我不是100%确定流在Gulp中的运行方式 - 当您传递文件列表时,它会循环通过每个文件的任务或仅运行一次?
我很好奇,因为如果它为每个文件贯穿,我正在努力执行这样的事情:
gulp.task('uglify', ['scripts'], function() {
return gulp.src(js_scripts)
.pipe(gulpif(condition, uglify({mangle: false})))
.pipe(concat('scripts.min.js'))
.pipe(gulp.dest('./js'));
});
哪些 condition
是检查文件是否在文件名中的.min
,如果是的,请不要uglifiate。
所以我的问题是 - 如果它循环遍历并且我可以在每个文件上运行条件,我该如何在文件名上运行测试,如果它不循环,那么我该如何实现我要尝试的东西在这里吗?我是否会被迫创建两个独立的任务,一个用于未经消息,一个用于.min
文件,然后结束时将它们加在一起?
我认为您的示例应该做到这一点,uglify
只有满足的文件 condition
,但将所有文件传递给下一个操作员,无用的条件。
gulp.task('uglify', ['scripts'], function() {
return gulp.src(js_scripts)
.pipe(gulpif(condition, uglify({mangle: false})))
.pipe(concat('scripts.min.js'))
.pipe(gulp.dest('./js'));
});
``gulp-if f at 1:条件过滤content 在其中说明的示例:
如果条件为真,则只会丑化内容,但将所有文件发送到DIST文件夹
我认为即使在DIST文件夹之前也有某些内容,它也会将所有文件发送到流。
至于循环问题,该条件在源中每件文件检查,js_scripts
。
编辑:您可以使用功能检查文件名条件
var condition = function (file) {
// TODO: add business logic
console.log(file.path);
return true;
}
编辑2
根据 @mark's和 @brett的评论和研究,您还可以使用正则判处排除已经缩小的文件,即带有.min.js
后缀的文件:
gulp.task('uglify', ['scripts'], function() {
return gulp.src(js_scripts)
.pipe(gulpif('!**/*.min.js', uglify({mangle: false})))
.pipe(concat('scripts.min.js'))
.pipe(gulp.dest('./js'));
});
在 @lofihelsinki的答案和 @mark的评论的帮助下,我能够提出解决方案。
虽然这些使我朝着正确的方向前进,但我仍然不得不通过反复试验调整一些代码,所以我无法接受答案,但是我想相信它们,因为它们带领我找到了解决方案。
最终解决方案是:
gulp.task('uglify', ['scripts'], function() {
return gulp.src(js_scripts)
.pipe(gulpif('!**/*.min.js', uglify({mangle: false})))
.pipe(concat('scripts.min.js'))
.pipe(gulp.dest('./js'));
});
我尝试了@mark的建议,但是似乎即使您在流中有文件,您仍然必须尊重文件夹位置。因此,我不得不将他对'!*.min.js'
的建议更改为'!**/*.min.js'
;现在,这只会在文件名中不包含 .min.js
的uglify脚本,而 do 将通过未触及的脚本。