不能让gulp-ruby-sass或gulp-sass工作

时间:2014-12-09 12:59:42

标签: ruby sass npm gulp-sass

我试图使用gulp-ruby-sass和/或gulp-sass,但两个都不适合我,并认为我已经正确设置了所有设置。我看了很多其他的SO帖子,但是对我来说什么都没有用。

我还有另一个gulp任务,它递归地将资产目录和index.html从src复制到dist,这每次都有效。

要测试sass设置是否正确,我运行一个vanilla sass编译然后运行gulp; sass更改工作并通过递归副本呈现。这是sass测试的命令:

$ sass ./sass/main.scss ./src/assets/css/main.css
$ gulp

忘记vanilla sass测试并返回到gulp sass问题 - 在我的gulpfile中我运行gulp sass任务,然后运行递归复制任务,所以如果它有效,那么应该应用sass更改并且复制。至少那是我的想法。

这是我的目录结构,显示相关文件:

    ├── src
    │    ├── index.html
    │    └── assets
    │           ├── css
    │           │    └── main.css
    │           ├── js
    │           │    └── app.js
    │           └── img
    │                └── etc.jpg
    │   
    ├── dist
    │    └── index.html ( from ./src via recursive copy)
    │    └── assets
    │           └── (same as ./src/assets via recursive copy)
    │   
    ├── sass
    │    ├── main.scss
    │    ├── _partial1.scss
    │    ├── _partial2.scss
    │    └── etc ...
    │
    ├── gulpfile.js
    │
    ├── node_modules
    │    └── etc ...
    │
    └── bower_components
         └── etc ...

在gulpfile.js中有几个文件映射对象,它们适用于src / assets /的递归副本。但是为了测试gulp-ruby-sass任务,我对sass / css路径进行了硬编码,以消除文件映射错误的可能性。

为了记录我在OSX Maverics 10.9.5上运行并认为我有正确的环境设置:

$ ruby -v
ruby 2.0.0p481 (2014-05-08 revision 45883) [universal.x86_64-darwin13]
$ sass -v
Sass 3.4.9 (Selective Steve)

这是我的gulpfile.js显示了我迄今为止尝试过的方法,其中gulp-sass相关任务被注释掉了:

    var gulp = require('gulp');
    var watch = require('gulp-watch');
    var gsass = require('gulp-ruby-sass');
    // var gsass = require('gulp-sass');
    var gutil = require('gulp-util');

    // Base paths:
    var basePaths = {
        srcRoot: './src/',
        distRoot: './dist/',
        bowerRoot: './bower_components/'
    };

    // File paths:
    var filePaths = {
        sassRoot: basePaths.srcRoot + 'sass/',
        assetsBuildRoot: basePaths.srcRoot + 'assets/',
        jqMin: basePaths.bowerRoot + 'jquery/dist/jquery.min.js',
        html: basePaths.srcRoot + 'index.html'
    };

    // With gulp-ruby-sass
    gulp.task('compile-sass', function() {
            gulp.src('./sass/main.scss')
            .pipe(gsass({sourcemap: true, sourcemapPath: './sass/'}))
            .on('error', function (err) { console.log(err.message); })
            .pipe(gulp.dest('./src/assets/css'));
    });

    // With gulp-sass
    // gulp.task('gsass', function () {
    //  gulp.src('./sass/*.scss')
    //      .pipe(gsass())
    //      .pipe(gulp.dest('./src/assets/css'));
    // });

    // Assets directory copied recursively from /src to /dist:
    gulp.src(filePaths.assetsBuildRoot + '**/*.*', {base : basePaths.srcRoot})
        .pipe(gulp.dest(basePaths.distRoot));

    // Copy index.html from /src to /dist:
    gulp.src(filePaths.html)
        .pipe(gulp.dest(basePaths.distRoot));

    gulp.task('default', function() {

        // With gulp-ruby-sass
        // return gulp.src('./sass/main.scss')
        //  .pipe(gsass({sourcemap: true, sourcemapPath: './sass/'}))
        //  .on('error', function (err) { console.log(err.message); })
        //  .pipe(gulp.dest('./src/assets/css'));

        // gulp.watch('compile-sass');

        console.log('You reached the finishing line');
    });

我尝试过各种各样的bugfix,例如: 删除所有vanilla sass编译的.css文件并运行gulp编译,但不生成.css。 还尝试删除由vanilla sass编译生成的所有* .map文件,然后运行gulp但没有骰子。

任何人都可以看到任何明显错误的东西吗?

提前致谢。

1 个答案:

答案 0 :(得分:1)

如果您使用的是Sass> = 3.4,则需要安装gulp-ruby-sass版本1.0.0-alpha:

npm install --save-dev gulp-ruby-sass@1.0.0-alpha

在这个新版本中,gulp-ruby-sass是一个gulp源适配器,语法略有改变。而不是:

gulp.task('compile-sass', function() {
        gulp.src('./sass/main.scss')
        task code here
});

新语法是:

gulp.task('compile-sass', function() {
       return sass('./sass/main.scss')
        task code here
});

您可以在新版本文档中找到更多信息,包括sourcemaps的新语法。 https://github.com/sindresorhus/gulp-ruby-sass/tree/rw/1.0