【发布时间】:2017-03-21 12:03:37
【问题描述】:
更新 -- 请参阅下面的附加信息,于 3 月 22 日添加...
我想用我的 Gulp 进程将 SCSS 变量注入代码文件。
我认为这是两个步骤:
Gulp SCSS _variables.scss 文件,以便我可以访问该变量
只需执行一个简单的 gulp.replace 即可进行字符串替换并删除 变量值到我的文件中(如答案here)
我被困在第 1 步。这就是我所拥有的……据我所知,没有大量记录的 gulp-sass-variables 插件应该将变量从 SCSS 文件中提取到 argv 对象中。所以我按照那个插件页面上的例子,尝试了这个:
gulp.task('test', function () {
gulp.src('sass/*')
.pipe(plugins.print())
.pipe(plugins.sassVariables({
$foundIt: argv.testSassVar
}))
console.log(argv);
});
print() 调用只是为了确认它正在读取我的 SCSS 文件(确实如此)。但它在我的 SCSS 代码中找不到$testSassVar,正如您从以下错误消息中看到的那样:
[12:53:04] Using gulpfile ~/dev/project/gulpfile.js
[12:53:04] Starting 'test'...
[12:53:04] 'test' errored after 15 ms
[12:53:04] ReferenceError: testSassVar is not defined
at Gulp.<anonymous> (...)
[12:53:04] sass/_mixins.scss <- this line and all below are from print()
[12:53:04] sass/_normalize.scss
[12:53:04] sass/_variables.scss
[12:53:04] sass/footer
[12:53:04] sass/header
[12:53:04] sass/landing
[12:53:04] sass/landing-style.scss
[12:53:04] sass/site
[12:53:04] sass/style.scss
我尝试删除 $foundIt 分配,并尝试填充 argv 对象,但最终输出一个空数组:
[13:00:57] Using gulpfile ~/dev/project/gulpfile.js
[13:00:57] Starting 'test'...
{ _: [ 'test' ], '$0': 'gulp' }
[13:00:57] Finished 'test' after 41 ms
有什么想法可以完成我想做的事情吗?!
3 月 22 日编辑
看起来我可以通过不同的路线并使用gulp-sass-json 插件来部分完成此任务:
gulp.task('sass-json', function () {
return gulp
.src(scss_base + '*')
.pipe(plugins.sassJson())
.pipe(gulp.dest(tmp + 'sass-vars.json'));
});
这会将文件写入/tmp,并将我的 SCSS 变量编译为 JSON 文件。然后我想,好吧,我可以在 gulp 中加载 JSON 文件并从那里解析它。不幸的是,这个插件不能解析二级变量(即引用变量的变量),所以你会得到这样的结果:
{
# variables parsed from SCSS to JSON by gulp-sass-json
# these are ok
"font__main": "'Open Sans', sans-serif",
"font__heading": "'Open Sans', sans-serif",
"font__line-height-body": "1.5",
"testSassVar": "123",
"color__nbar": "#ffffff",
"color__nbar_bg": "#50B107",
"size_border-radius": "3px"
# these variables reference other variables, not parsed, ouch
"color__background-body": "$color__nbar",
"color__background-screen": "$color__nbar",
# and this is even worse, the SCSS function isn't parsed, double ouch
"color_test": "lighten($color__nbar, 50%)",
}
如您所见,作为对其他变量的简单引用的变量可能可以通过一些 Javascript 来修复以仅解析它们,但是一旦您使用 SASS 函数,这个想法就会崩溃。
理想情况下,SCSS 编译器可以解析非静态值的变量。这可能吗(或者是否开始真正解决这个问题)?
我唯一的另一个想法是将所有变量移动到 JSON 文件,然后使用一个 gulp 插件,该插件朝另一个方向移动 - JSON 到 SASS 变量。但是这样我就不会获得让 SCSS 编译器运行函数、解析变量等然后将这些值返回给我的 gulp 文件的优势。
因为我的目标是让(解析的)变量中的 SASS 值可用于我的 gulp 文件,所以我可以转身将它们放入另一个(HTML 或 PHP)代码文件中,进行简单的字符串替换。如果有更简单的方法来实现我的最终目标,我会全力以赴......
【问题讨论】: