吞下Concat文件,然后任何其他js文件

我将如何去添加一些特定的顺序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/')); }); 

不知道这是否会重新添加已经concate文件,因为我使用一个glob。

gulp.src()使用node-glob 。 如果您查看node-glob的源代码 ,则作者给出了该algorithm的伪代码描述(缩写,请参阅完整伪代码的源代码):

 // 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/file2.js将按照该顺序显式传递给gulp.src() 。 在这种情况下,不需要使用gulp-order

没有重复。 由于文件是唯一的,它们都不会在你的gulpstream中发射两次。 事实上, node-glob需要采取特殊的预防措施来防止重复项的扩展 :

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

以及符号链接 :

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

TLDR:是的,你的代码工作。

咕噜顺序可能是你在找什么。 我还没有testing下面的代码,但文档有点build议它会工作。 如果它不起作用,我build议你试着对最后的globstar进行更具体的描述,以便在可能的情况下对目录进行testing。

 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/')); }); 

还有一个文章和一个工作的例子。