我有一个情况,我目前丑化所有的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
是一个文件,以前是连接在一起,但显然,如果有一些已经压缩的文件在那里,那么他们将再次得到丑化,这是我们试图避免。
因此,我做了一个搜索,并一直在寻找处理所有的文件再次,而不是工作小康的unminified(文件,只是包含串联文件)版本,使我有更多的控制每个文件。
我研究了使用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
的东西,如果有,不要丑化它。
所以我的问题是-如果它循环通过,我可以对每个文件运行条件,我如何对文件名运行测试?如果它不循环通过,我如何实现我在这里试图做的事情?我将被迫创建两个单独的任务,一个用于未缩小的文件,一个用于.min
文件,然后在最后将它们结合在一起吗?
2条答案
按热度按时间6jygbczu1#
我认为你的例子应该做到这一点,
uglify
只处理满足condition
的文件,但将所有文件传递给下一个操作符,而不考虑条件。在'gulp-if'中有一个例子叫做 *1:有条件地过滤内容 *,其中包含:
如果条件为真,则仅丑化内容,但将所有文件发送到dist文件夹
我认为它会将所有的文件发送到流中,即使在dist文件夹之前有一些东西。
至于循环问题,条件是在源代码中逐个文件检查的,这里是
js_scripts
。EDIT:您可以使用函数来检查文件名条件
编辑2
根据@mark和@Brett的评论和研究,您也可以使用Regex排除已经缩小的文件,即带有
.min.js
后缀的文件:fkvaft9z2#
在@lofihelsinki的answer和@mark的评论的帮助下,我想出了一个解决方案。
虽然这些引导我在正确的方向,我仍然不得不调整一些代码通过试验和错误,所以我不能接受的答案,但我想相信他们,因为他们引导我的解决方案。
最终解决方案为:
我尝试了@Mark的建议,但是看起来即使你在流中有文件,你仍然必须尊重文件夹的位置;所以我不得不把他的建议
'!*.min.js'
改为'!**/*.min.js'
;这只会使文件名中 * 不 * 包含.min.js
的脚本变丑,而 do 的脚本将原封不动地通过。