Javascript Gulp.js事件流合并顺序
我正在尝试将css和scss文件合并到一个main.css文件中,该文件位于我的构建目录中。 工作正常,但顺序不对。scss文件中的样式属性需要位于main.css文件的底部,这样它们就可以覆盖其余的样式属性 我的吞咽任务如下所示: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
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'));
});