理解 Gulp 管道顺序
Understand Gulp pipe order
上下文
我想解析一些 .sass
文件并在将它们编译成 .css
之前替换一个变量。
为此我使用了 gulp, gulp-sass and gulp-preprocess:
npm install gulp gulp-sass gulp-preprocess --save-dev
Gulpfile.js
var gulp = require('gulp');
var sass = require('gulp-sass');
var preprocess = require('gulp-preprocess');
var settings = {
HOST_URL: 'qa.host.com'
}
gulp.task('sass', function () {
return gulp.src('./sass/**/*.sass')
.pipe(sass({indentedSyntax: true}))
.pipe(preprocess({context: settings}))
.pipe(gulp.dest('./dist'));
});
sass/styles.sass
@import "partials/variables"
body
background-image: url("//#{ $host_url }/foo.jpg")
.bar
color: $red
background-image: $host_url
sass/partials/_variables.sass
$red: #ff0000
$host_url: '/* @echo HOST_URL */'
CLI
gulp sass
这有效。它创建了一个 dist/styles.css
文件,其中包含预期的替换变量。
问题:
第一次尝试时,我试图在 sass
:
之前执行 preprocess
.pipe(preprocess({context: settings}))
.pipe(sass({indentedSyntax: true}))
根本不会替换变量:
body {
background-image: url("///* @echo HOST_URL *//foo.jpg"); }
.bar {
color: #ff0000;
background-image: '/* @echo HOST_URL */'; }
那么,为什么preprocess
要在sass
之后执行呢? sass 转换后的管道 return 不是已经编译的 css 吗?这意味着变量已经应用并压缩到流中...
看起来在某个时刻流向另一个方向。
为什么先预处理时不起作用:
问题与编译时如何引用 sass 文件有关。由于 style.sass
导入 partials/variables
此文件在流外引用,它将检索原始(未预处理)文件。
为什么它在预处理之后工作:
由于已编译的 .css
仍然具有 '/* @echo HOST_URL */'
值,因此预处理任务能够将该值替换为所需的值。没有黑魔法,也没有倒流。
上下文
我想解析一些 .sass
文件并在将它们编译成 .css
之前替换一个变量。
为此我使用了 gulp, gulp-sass and gulp-preprocess:
npm install gulp gulp-sass gulp-preprocess --save-dev
Gulpfile.js
var gulp = require('gulp');
var sass = require('gulp-sass');
var preprocess = require('gulp-preprocess');
var settings = {
HOST_URL: 'qa.host.com'
}
gulp.task('sass', function () {
return gulp.src('./sass/**/*.sass')
.pipe(sass({indentedSyntax: true}))
.pipe(preprocess({context: settings}))
.pipe(gulp.dest('./dist'));
});
sass/styles.sass
@import "partials/variables"
body
background-image: url("//#{ $host_url }/foo.jpg")
.bar
color: $red
background-image: $host_url
sass/partials/_variables.sass
$red: #ff0000
$host_url: '/* @echo HOST_URL */'
CLI
gulp sass
这有效。它创建了一个 dist/styles.css
文件,其中包含预期的替换变量。
问题:
第一次尝试时,我试图在 sass
:
preprocess
.pipe(preprocess({context: settings}))
.pipe(sass({indentedSyntax: true}))
根本不会替换变量:
body {
background-image: url("///* @echo HOST_URL *//foo.jpg"); }
.bar {
color: #ff0000;
background-image: '/* @echo HOST_URL */'; }
那么,为什么preprocess
要在sass
之后执行呢? sass 转换后的管道 return 不是已经编译的 css 吗?这意味着变量已经应用并压缩到流中...
看起来在某个时刻流向另一个方向。
为什么先预处理时不起作用:
问题与编译时如何引用 sass 文件有关。由于 style.sass
导入 partials/variables
此文件在流外引用,它将检索原始(未预处理)文件。
为什么它在预处理之后工作:
由于已编译的 .css
仍然具有 '/* @echo HOST_URL */'
值,因此预处理任务能够将该值替换为所需的值。没有黑魔法,也没有倒流。