缩进的 Sass 语法不适用于 node-sass 和 gulp-sass

2022-01-12 00:00:00 node.js css sass gulp

Libsass 2.0 为 libsass 用户带来了缩进语法,但到目前为止,我还无法使其与 node-sassgulp-sass 一起使用.我有所有最新版本:

node-sass:0.93
gulp-sass:0.7.2
吞咽:3.8.2

此设置使用括号语法编译 .scss 文件甚至 .sass 文件,但不会编译缩进语法.有人用 node-sass 和 gulp 成功编译了缩进语法吗?

我的 gulpfile.js

var gulp = require('gulp');var sass = require('gulp-sass');gulp.task('sass', function() {返回 gulp.src('./sites/all/themes/nsfvb/sass/screen.sass').pipe(萨斯({includePaths: require('node-neat').includePaths,errLogToConsole: 真})).pipe(gulp.dest('./sites/all/themes/nsfvb/css'));});gulp.task('watch', function() {gulp.watch('./sites/all/themes/nsfvb/sass/*.sass', ['sass']);});gulp.task('default', ['sass', 'watch']);


运行默认任务时出错

错误:无效的顶级表达式

解决方案

更新答案:

<块引用>

如果您想使用缩进语法 (.sass) 作为顶级文件,请使用 sass({indentedSyntax: true}).

sass({indentedSyntax: true})

过时的答案

在这里找到答案:https://github.com/dlmanning/gulp-sass/issues/55#issuecomment-50882250

<块引用>

使用默认设置编译 sass 文件不起作用.但是,有一种解决方法.如果您通过 sourceComments: 'normal' 作为参数编译工作.原因是有一个奇怪的条件改变了文件的处理方式:https://github.com/dlmanning/gulp-sass/blob/master/index.js#L23-L27

此处的代码示例:https://github.com/chrisdl/gulp-libsass-example/blob/master/gulpfile.js

var gulp = require('gulp');var sass = require('gulp-sass');//在终端中使用> gulp sass"运行.gulp.task('sass', function () {gulp.src('./sass/main.sass').pipe(sass({sourceComments: 'normal'})).pipe(gulp.dest('./css'));});

通知

如果您在使用此代码段时遇到问题,请查看以下引用和问题.

<块引用>

使用此解决方法将导致 gulp 管道中早期文件内容的任何更改(例如早期插件)被丢弃 - JMM

https://github.com/dlmanning/gulp-sass/issues/158

Libsass 2.0 brought the indented syntax to libsass users, but so far I've been unable to make it work with node-sass and gulp-sass. I have all of the latest versions:

node-sass: 0.93
gulp-sass: 0.7.2
gulp: 3.8.2

This setup compiles .scss files and even .sass files using the bracket syntax but it will not compile the indented syntax. Has anyone successfully compiled the indented syntax with node-sass and gulp?

My gulpfile.js

var gulp = require('gulp');
var sass = require('gulp-sass');

gulp.task('sass', function() {
    return gulp.src('./sites/all/themes/nsfvb/sass/screen.sass')
        .pipe(sass({
            includePaths: require('node-neat').includePaths,
            errLogToConsole: true
        }
        ))
        .pipe(gulp.dest('./sites/all/themes/nsfvb/css'));
});

gulp.task('watch', function() {
    gulp.watch('./sites/all/themes/nsfvb/sass/*.sass', ['sass']);
});

gulp.task('default', ['sass', 'watch']);


Error when running the default task

error: invalid top-level expression

解决方案

Updated answer:

If you want to use the indented syntax (.sass) as the top level file, use sass({indentedSyntax: true}).

sass({indentedSyntax: true})

Outdated answer

Answer found here: https://github.com/dlmanning/gulp-sass/issues/55#issuecomment-50882250

With default settings compiling sass files doesn't work. However there is a workaround. If you pass sourceComments: 'normal' as parameter the compilation work. The reason for this is that there is a strange condition which change how file are handled: https://github.com/dlmanning/gulp-sass/blob/master/index.js#L23-L27

Code example found here: https://github.com/chrisdl/gulp-libsass-example/blob/master/gulpfile.js

var gulp = require('gulp');
var sass = require('gulp-sass');

// Run with "> gulp sass" in terminal.
gulp.task('sass', function () {
gulp.src('./sass/main.sass')
    .pipe(sass({sourceComments: 'normal'}))
    .pipe(gulp.dest('./css'));
});

Notice

If you run into issues using this snippet take a look at the following quote and issue.

Using this workaround will result in any changes to the file content from earlier in the gulp pipeline (e.g. earlier plugins) being discarded - JMM

https://github.com/dlmanning/gulp-sass/issues/158

相关文章