Javascript Gulp.js事件流合并顺序

Javascript Gulp.js事件流合并顺序,javascript,concatenation,gulp,event-stream,gulp-sass,Javascript,Concatenation,Gulp,Event Stream,Gulp Sass,我正在尝试将css和scss文件合并到一个main.css文件中,该文件位于我的构建目录中。 工作正常,但顺序不对。scss文件中的样式属性需要位于main.css文件的底部,这样它们就可以覆盖其余的样式属性 我的吞咽任务如下所示: //CSS gulp.task('css', function () { var cssTomincss = gulp.src(['dev/css/reset.css', 'dev/css/style.css','dev/css/typography

我正在尝试将css和scss文件合并到一个main.css文件中,该文件位于我的构建目录中。 工作正常,但顺序不对。scss文件中的样式属性需要位于main.css文件的底部,这样它们就可以覆盖其余的样式属性

我的吞咽任务如下所示:

    //CSS
gulp.task('css', function () {
    var cssTomincss = gulp.src(['dev/css/reset.css', 'dev/css/style.css','dev/css/typography.css',    'dev/css/sizes.css']);

    var cssFromscss = gulp.src(['dev/css/*.scss'])
        .pipe(sass());

    return es.merge(cssTomincss, cssFromscss)
        .pipe(concat('main.css'))
        .pipe(minifyCSS())
        .pipe(gulp.dest('build/css'))
});
我首先用变量定义源。我正在使用gulp sass插件将scss文件转换为普通css(.pipe(sass)),然后使用es.merge函数将两者合并,并将它们连接到main.css

问题是.scss文件中的样式属性最终位于main.css文件的顶端。我需要他们在底部。因此,它们需要在底部连接起来


有没有关于如何做到这一点的线索?

这个插件似乎非常适合您的情况

它允许您使用自己的
glob
模式对传递的
流重新排序,例如基于您的代码:

return es.merge(cssTomincss, cssFromscss)
    .pipe(order([
      'dev/css/reset.css',
      'dev/css/style.css',
      'dev/css/typography.css',
      'dev/css/sizes.css',
      'dev/css/*.css',
    ]))
    .pipe(concat('main.css'))
    .pipe(minifyCSS())
    .pipe(gulp.dest('build/css'))
这样做的一个缺点是,您必须重新声明
全局
,但您可以通过将
全局
分配给一个值,然后将它们集中到
顺序
管道中,这样做更干净

如果文件顺序不正确,您可能必须按照自述文件中的说明,将
base
选项设置为

另一种方法是使用,基本上与事件流相同,但流的顺序是保留的,并且您不必重写
全局文件

我会帮助你的。在这里。

我尝试了但没有成功:不知何故,顺序没有考虑在内

对我有效的解决方案是使用所提到的


我没有回答所有问题,他们产生了一些无声的错误。终于为我工作了(好像有了
gulpmerge
,后来项目被重命名为
merge2
)。我不确定为什么需要插件,例如,使用汇总创建的流可能会产生
gulp concat
gulp uglify
gulp insert
的“流不支持错误”

const mergeStreams = require('merge2');
const streamify = require('streamify');
...
gulp.task('build', () => {
    const streams = sources.map(createJSFile);
    return mergeStreams(...streams)
        .pipe(streamify(concat('bundle.js')))
        .pipe(streamify(uglify()))
        .pipe(gulp.dest('./dist'));
});

好的,那是史诗般的。成功了!我调查了一下,现在明白了。非常感谢!!你好多亏了你,我才使用streamqueue。。但是遇到了问题:(注意看一看?streamqueue总是抛出“现在无法切换到旧模式”。使用合并流然后吞咽顺序仍然有效。它没有以正确的顺序将它们合并:(即使我在streamqueue中反转顺序,它仍然输出相同的(错误)有时它并没有像预期的那样拾取路径。使用
.pipe(顺序[path1,path2],{base:'.})
解决了这个问题。嗯,文件是否在不同的文件夹中?将在我的回答中添加此信息,谢谢。回答很好-只是提醒回答此问题的人,您需要通过npm安装gulp order并将其导入gulp文件顶部。
return streamSeries(
    cssTomincss,
    cssFromscss)
    .pipe(concat('main.css'))
    .pipe(minifyCSS())
    .pipe(gulp.dest('build/css'));
const mergeStreams = require('merge2');
const streamify = require('streamify');
...
gulp.task('build', () => {
    const streams = sources.map(createJSFile);
    return mergeStreams(...streams)
        .pipe(streamify(concat('bundle.js')))
        .pipe(streamify(uglify()))
        .pipe(gulp.dest('./dist'));
});