7

我正在使用 gulp-ruby-sass 来编译我的 js 和 sass。

我首先遇到了这个错误TypeError:Arguments to path.join must be strings

找到了这个答案,这是因为我使用的是带有 gulp -sass的源图,而答案建议使用gulp-ruby-sass代替。

接下来,我尝试使用以下语法编译所有 SASS 文件:

gulp.task('sass', function () {
    return sass('public/_sources/sass/**/*.scss', { style: 'compressed' })
        .pipe(sourcemaps.init())
        .pipe(concat('bitage_public.css'))
        .pipe(sourcemaps.write('./maps'))
        .pipe(gulp.dest('public/_assets/css'))
        .pipe(livereload());
});

这产生了这个错误: gulp-ruby-sass stderr: Errno::ENOENT: No such file or directory - public/_sources/sass/**/*.scss

然后我注意到在答案中我发现作者写道**尚不支持地球仪:

还要记住,在撰写本文时,使用 gulp-ruby-sass 1.0.0-alpha 时,还不支持 glob。

我做了更多的挖掘并找到了一种使用数组来指定我的 SASS 文件路径的方法,所以我尝试了以下方法:

gulp.task('sass', function () {
    return sass(['public/_sources/sass/*.scss',
             'public/_sources/sass/layouts/*.scss',
             'public/_sources/sass/modules/*.scss',
             'public/_sources/sass/vendors/*.scss'], { style: 'compressed' })
    // return sass('public/_sources/sass/**/*.scss', { style: 'compressed' })
    .pipe(sourcemaps.init())
    .pipe(concat('bitage_public.css'))
    .pipe(sourcemaps.write('./maps'))
    .pipe(gulp.dest('public/_assets/css'))
    .pipe(livereload());
});

但我仍然得到Errno::ENOENT: No such file or directory它,它列出了我放入该数组的所有目录。

如何使用 gulp 在多个目录中编译 SASS?

SASS 源码文件夹结构:

_sources
    layouts
        ...scss
    modules
        ...scss
    vendors
        ...scss
    main.scss
4

2 回答 2

7

弄清楚了!

好吧,不是 100%,仍然不确定为什么多路径阵列不起作用。

无论如何,所以我忘记了在我的主 web.scss 文件中我已经设置了多个导入语句:

@import "vendors/normalize";    // Normalize stylesheet
@import "modules/reset";        // Reset stylesheet
@import "modules/base";         // Load base files
@import "modules/defaults";     // Defaults
@import "modules/inputs";       // Inputs & Selects
@import "modules/buttons";      // Buttons
@import "modules/layout";       // Load Layouts
@import "modules/svg";          // Load SVG
@import "modules/queries";      // Media Queries

所以我实际上并不需要像我尝试的那样尝试使用 Gulp,我只需要.scss直接定位那个 1 文件。所以我在这里做到了:

// Compile public SASS
gulp.task('sass', function () {
return sass('public/_sources/sass/bitage_web.scss', { style: 'compressed' })
    .pipe(sourcemaps.init())
    .pipe(sourcemaps.write('./maps'))
    .pipe(gulp.dest('public/_assets/css'))
    .pipe(livereload());
});

现在它可以工作了,因为它看到了一个要定位和编译的特定文件

于 2015-02-14T23:33:05.253 回答
5

我在使用 '*.scss' 时也遇到了问题

在 git 文档(https://github.com/sindresorhus/gulp-ruby-sass)中,他们使用了这个 sintax:

gulp.task('sass', function(){
   return sass('public/_sources/sass/',
   { style: 'compressed'})
.pipe(sourcemaps.init())
});

我对其进行了测试,它可以工作,它编译了文件夹中的所有文件。

以防万一有人遇到同样的问题

于 2015-09-03T04:29:45.153 回答