我有一种情况,即使它们已经被压缩,我目前正在丑化所有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
是一个以前连接在一起的文件,但很明显,如果那里有一些已压缩的文件,那么它们将再次被证实,我们正试图避免这种情况。
所以我进行了搜索并一直在寻找再次处理所有文件,而不是处理未经通信化的文件(只包含连接文件的文件)版本,以便我可以更好地控制每个文件。
我研究过使用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
个文件,然后最后将它们连接在一起?
答案 0 :(得分:1)
我认为你的例子应该这样做,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'));
});
在名为1: Conditionally filter content的gulp-if
页面上有一个示例:
如果条件为真,则仅对内容进行uglify,但将所有文件发送到dist文件夹
我认为即使在dist文件夹之前有内容,它也会将所有文件发送到流中。
对于循环问题,将在源文件中检查每个文件的条件js_scripts
。
编辑:您可以使用条件功能检查文件名
var condition = function (file) {
// TODO: add business logic
console.log(file.path);
return true;
}
编辑2
根据@mark& @ 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'));
});
答案 1 :(得分:0)
在@ lofihelsinki的answer和@ mark的comment的帮助下,我能够找到解决方案。
虽然这些导致我朝着正确的方向发展,但我仍然不得不通过反复试验调整一些代码,所以我无法接受答案,但我想要归功于他们,因为他们引导我找到解决方案。
最终解决方案是:
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,而做的脚本将不会被触及。