csssassgulp-sassnode-sasslibsass

How to compile or convert sass / scss to css with node-sass (no Ruby)?


I was struggling with setting up libsass as it wasn't as straight-forward as the Ruby based transpiler. Could someone explain how to:

  1. install libsass?
  2. use it from command line?
  3. use it with task runners like gulp and grunt?

I have little experience with package managers and even less so with task runners.


Solution

  • I picked node-sass implementer for libsass because it is based on node.js.

    Installing node-sass

    This will hopefully install all you need, if not read libsass at the bottom.

    How to use node-sass from Command line and npm scripts

    General format:

    $ node-sass [options] <input.scss> [output.css]
    $ cat <input.scss> | node-sass > output.css
    

    Examples:

    1. $ node-sass my-styles.scss my-styles.css compiles a single file manually.
    2. $ node-sass my-sass-folder/ -o my-css-folder/ compiles all the files in a folder manually.
    3. $ node-sass -w sass/ -o css/ compiles all the files in a folder automatically whenever the source file(s) are modified. -w adds a watch for changes to the file(s).

    More usefull options like 'compression' @ here. Command line is good for a quick solution, however, you can use task runners like Grunt.js or Gulp.js to automate the build process.

    You can also add the above examples to npm scripts. To properly use npm scripts as an alternative to gulp read this comprehensive article @ css-tricks.com especially read about grouping tasks.

    "scripts": {
        "test" : "bla bla bla",
        "sass": "node-sass -w sass/ -o css/"
     }
    

    How to use with gulp

    'use strict';
    var gulp = require('gulp');
    

    A basic example to transpile

    Add this code to your gulpfile.js:

    var gulp = require('gulp');
    var sass = require('gulp-sass');
    gulp.task('sass', function () {
      gulp.src('./sass/**/*.scss')
        .pipe(sass().on('error', sass.logError))
        .pipe(gulp.dest('./css'));
    });
    

    $ gulp sass runs the above task which compiles .scss file(s) in the sass folder and generates .css file(s) in the css folder.

    To make life easier, let's add a watch so we don't have to compile it manually. Add this code to your gulpfile.js:

    gulp.task('sass:watch', function () {
      gulp.watch('./sass/**/*.scss', ['sass']);
    });
    

    All is set now! Just run the watch task:

    $ gulp sass:watch
    

    How to use with Node.js

    As the name of node-sass implies, you can write your own node.js scripts for transpiling. If you are curious, check out node-sass project page.

    What about libsass?

    Libsass is a library that needs to be built by an implementer such as sassC or in our case node-sass. Node-sass contains a built version of libsass which it uses by default. If the build file doesn't work on your machine, it tries to build libsass for your machine. This process requires Python 2.7.x (3.x doesn't work as of today). In addition:

    LibSass requires GCC 4.6+ or Clang/LLVM. If your OS is older, this version may not compile. On Windows, you need MinGW with GCC 4.6+ or VS 2013 Update 4+. It is also possible to build LibSass with Clang/LLVM on Windows.