【问题标题】:Using gulp-if with gulp-useref and gulp-uglify将 gulp-if 与 gulp-useref 和 gulp-uglify 一起使用
【发布时间】:2016-01-07 16:04:36
【问题描述】:

我想使用 gulp-useref 将我所有的 JavaScript 文件合并为一个。

在我的 JavaScript 文件中,我混合了 pre-minifiednon-minified 文件。

我只想对尚未缩小的文件进行 uglify(出于构建性能的原因),https://github.com/jonkemp/gulp-useref#transform-streams 表明这是可能的(实际上,它看起来很容易)。以下是我的 Gulp 任务定义:

gulp.task('compile', function () {
    return gulp.src('index.html')
        .pipe(useref({}, lazypipe().pipe(function() {
            return gulpif(['*.js', '!*.min.js'], uglify());
        })))
        .pipe(gulp.dest(paths.build));
});

这很有效,因为我得到了一个连接文件,但未缩小的文件保持未缩小(预缩小的文件仍然被缩小 - 正如预期的那样)。

我的代码部分基于此:https://github.com/craigjennings11/gulp-uglifyjs

知道为什么我的文件没有被缩小吗?


参考文献

【问题讨论】:

    标签: javascript gulp gulp-uglify gulp-useref gulp-if


    【解决方案1】:

    对于遇到此问题的其他人:我发现一旦开始将我的 glob 放入 gulpif 的条件参数中的数组中,我就必须使用 **/ 通配符模式,例如

    gulp.task('compile', function () {
        return gulp.src('index.html')
            .pipe(useref({}, lazypipe().pipe(function() {
                return gulpif(['**/*.js', '!**/*.min.js'], uglify());
            })))
            .pipe(gulp.dest(paths.build));
    });
    

    然后它对我来说非常有用。

    【讨论】:

      【解决方案2】:

      这里的问题是 useref 只传递连接的文件名,而不是连接的单个文件名。

      //in html
      <!-- build:js assets/scripts/concat.js --> // <-- this one
      <script src="assets/scripts/jquery.min.js"></script> // <-- not this one
      <script src="assets/scripts/gsap.min.js"></script> // <-- not this one
      <script src="assets/scripts/script1.js"></script> // <-- not this one
      <script src="assets/scripts/script2.js"></script> // <-- not this one
      <!-- endbuild -->
      

      因此,您在管道之后的任何内容都必须应用于整个连接文件。

      但是稍微重新安排一下,你可以做这样的事情:

      //in html
      <!-- build:js assets/scripts/libs.js -->
      <script src="assets/scripts/jquery.min.js"></script>
      <script src="assets/scripts/gsap.min.js"></script>
      <!-- endbuild -->
      
      <!-- build:js assets/scripts/main.js -->
      <script src="assets/scripts/script1.js"></script>
      <script src="assets/scripts/script2.js"></script>
      <!-- endbuild -->
      

      这样你就可以使用 gulp-if 将 main.js 隔离为 uglify:

      .pipe(gulpif('main.js', uglify()))
      

      【讨论】:

        【解决方案3】:

        你试过了吗?

        gulp.task('compile', function () {
            return gulp.src('index.html')
                .pipe(useref())
                .pipe(gulpif(['*.js', '!*.min.js'], uglify()))
                .pipe(gulp.dest(paths.build));
        });
        

        【讨论】:

        • 嘿,是的,那是我的原始代码,但据我所知,在那个阶段我只得到一个连接文件,所以它只是缩小了所有内容。
        • 这不是你想要的吗? gulp-useref 插件默认连接文件,因此您需要使用 no-concat 选项将它们拆分出来,然后在其他地方再次连接它们。
        • 最终,是的。但是,我想在连接之前处理其中一些文件——因此使用转换流 (github.com/jonkemp/gulp-useref#transform-streams)
        • 文档建议转换流就是为了这个目的(“在 concat 之前转换资产。”)——我误解了吗?
        • 虽然缩小并不真正适合该用例。该用例更多用于在连接它们之前转换 css 或 javascript 文件。如您所见,如果您只想缩小,上述 gulp 任务是一种更简单的方法。
        猜你喜欢
        • 2015-12-17
        • 1970-01-01
        • 2016-12-17
        • 2016-08-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多