Gulp-Concat文件的顺序然后是任何其他的js文件

Gulp Concat files in order then any other js files

本文关键字:文件 其他 js 任何 然后 顺序 Gulp-Concat      更新时间:2023-12-09

如何按照特定顺序添加一些js文件,然后再添加其他文件?我正考虑这样做:

var concat = require('gulp-concat');
gulp.task('scripts', function() {
  return gulp.src(['./lib/file3.js', './lib/file1.js', './lib/file2.js', './lib/**/*.js'])
    .pipe(concat('all.js'))
    .pipe(gulp.dest('./dist/'));
});

不确定这是否会重新添加已经连接的文件,因为我使用的是glob。

Gulp订单可能就是您想要的。我还没有测试下面的代码,但文档在某种程度上表明它会起作用。如果它不起作用,我建议您尝试对最后一个globstar更加具体,以便在可能的情况下确定目录范围。

var order = require("gulp-order");
gulp.task('scripts', function() {
  return gulp.src('./lib/**/*.js')
    .pipe(order([
      'file3.js', 
      'file1.js', 
      'file2.js', 
      '**/*.js'
     ]))
    .pipe(concat('all.js'))
    .pipe(gulp.dest('./dist/'));
});

还有一篇文章提供了一个工作示例。

gulp.src()使用node-glob。如果你看一下node-glob的源代码,作者会给出算法的伪代码描述(简称,完整伪代码见源代码):

// 1. Get the minimatch set
// 2. For each pattern in the set, PROCESS(pattern, false)
// 3. Store matches per-set, then uniq them

这对你来说意味着:

订单得以保留如果您将文件./lib/file3.js./lib/file1.js./lib/file2.js按该顺序显式传递给gulp.src(),则它们将按该顺序发出。在这种情况下不需要使用gulp-order

无重复由于这些文件是uniqed的,因此它们都不会在您的gump流中发出两次。事实上,node-glob采取了特定的预防措施来防止大括号扩展的重复:

nounique在某些情况下,大括号展开模式可能会导致同一文件在结果集中多次显示。默认情况下,此实现可防止结果集中出现重复。设置此标志可禁用该行为。

以及符号链接:

请注意,符号链接目录不会作为**的一部分进行爬网,尽管它们的内容可能与模式的后续部分相匹配。这可以防止无限循环和重复等。

TLDR:是的,你的代码有效。