语境
我想解析一些.sass
文件并在将它们编译成.css
.
为此,我使用了gulp、gulp-sass和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'));
});
萨斯/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 */'
命令行界面
gulp sass
这行得通。它会dist/styles.css
按预期创建一个包含替换变量的文件。
问题:
在第一次尝试时,我试图执行preprocess
之前sass
:
.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转换后的管道不会返回已经编译的css吗?这意味着变量已经被应用并被压缩到流中......
看起来在某些时候流向另一个方向。