1

如果我将 gulp-useref 与几个 html 文件一起使用,它每次都使用相同的包进行处理。

  1. 有没有办法处理第一个传入的包并只替换其他文件中的字符串?例如,如果您查看下面的代码 - gulp-useref 创建 vendor.js 两次(第二次重写之前的文件)。如果您有很多文件并且您使用 css 和 js 的缩小,则可能需要很长时间,具体取决于您使用的具有相同捆绑包的文件数量。

  2. 如何复制未包含在捆绑包中的其他文件?

结构:

html-file-1.html

<!-- build:js js/vendor.js -->
<script scr="js/script-1.js"></script>
<script scr="js/script-2.js"></script>
<!-- endbuild -->
<script scr="js/file-1-script.js"></script>

html-file-2.html

<!-- build:js js/vendor.js -->
<script scr="js/script-1.js"></script>
<script scr="js/script-2.js"></script>
<!-- endbuild -->
<script scr="js/file-2-script.js"></script>

任务:

var files = [],
    getExcludedFiles = function() {
       var temp = files;
       for(var i = 0; i < temp.length; i++) {
          temp[i] = "!" + temp[i]
       }

       return temp;
    };

gulp.task("useref", function() {
   var assets = useref.assets();

   return gulp.src(path_to_htmls)
              .pipe(assests)
              .pipe(some_function_to_store_bundle_files_in_some_var)
              .pipe(gulpif('*.js', uglify()))
              .pipe(assets.restore())
              .pipe(useref())
              .pipe(gulp.dest(dets_path))
});


gulp.task("js", ["useref"], function() {
   return gulp.src([path_to_JS, getExcludedFiles()])
              .pipe(gulp.dest(JS_dets_path))
});
4

1 回答 1

0

我认为gulp-cached做你需要的。

https://github.com/contra/gulp-cached

这保留了已通过它的文件(及其内容)的内存缓存。如果文件在上次运行时已经通过,则不会>向下传递。这意味着您只处理您需要的内容并节省时间和资源。

于 2015-10-23T19:29:22.763 回答