跳过gulp的已压缩文件的uglify



我有一个情况,即使已经压缩了所有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-ignoregulp-ifgulp-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 将通过未触及的脚本。

相关内容

  • 没有找到相关文章

最新更新