hitmands/gulp-sass-pedigree

View on GitHub
README.md

Summary

Maintainability
Test Coverage
# gulp-sass-pedigree
[![Build Status](https://travis-ci.org/hitmands/gulp-sass-pedigree.svg?branch=master)](https://travis-ci.org/hitmands/gulp-sass-pedigree) 
[![Code Climate](https://codeclimate.com/github/hitmands/gulp-sass-pedigree/badges/gpa.svg)](https://codeclimate.com/github/hitmands/gulp-sass-pedigree) 
[![Test Coverage](https://codeclimate.com/github/hitmands/gulp-sass-pedigree/badges/coverage.svg)](https://codeclimate.com/github/hitmands/gulp-sass-pedigree)
![Downloads](https://img.shields.io/npm/dt/gulp-sass-pedigree.svg)
![Version](https://img.shields.io/npm/v/gulp-sass-pedigree.svg)

Incremental Caching System for Gulp and NodeSass

## Where
 - https://github.com/hitmands/gulp-sass-pedigree
 - https://www.npmjs.com/package/gulp-sass-pedigree

## Info
There are a lot of community-based solutions which face the issue regarding the gulp incremental building ([`gulp-progeny`](https://github.com/HerringtonDarkholme/gulp-progeny/) is definitely one of these). Because of its agnostic nature, gulp cannot know the related files to the one edited, and, because of this, it needs to *resync* all the sources with their corresponding outputs `gulp.src('src/**/*.scss').pipe(gulp.dest('./dest'))`.

#### Why choosing `gulp-sass-pedigree`?
Because it is specifically designed on top of [`gulp`](http://gulpjs.com/) and [`node-sass`](https://github.com/sass/node-sass), it isn't thought to be agnostic and work with different file types (as `gulp-progeny` is). For example, while editing a parent, you don't need to add any *imported file* to the stream because that is how sass works, otherwise, **you need to add any parent while editing a child and that is what `gulp-sass-pedigree` exactly does**. 

#### Features
  - No unnecessary file system access (`fs.existsSync` only)
  - Multiple inline imports `@import "foo", "baz", "foobaz";`
  - Nested imports `.foo { @import "baz"; }` and `.foobaz { @import "foo"; }`
  - Top files only (eg: if `a => b => c` while editing `c`, only `a` will be added to the stream)
  - Sass Specific file name convention (eg: it handles `foo`, but also `_foo` with or without extension)

## Getting Started
`npm install --save-dev gulp-sass-pedigree`

## gulpfile
```javascript

const gulp = require('gulp');
const sass = require('gulp-sass');
const options = {
  ext: '.scss', // string (the file extension)
  verbose: false // boolean,
  includePaths: [] // string[] (additional paths where to look for files
};
const {study, getAncestors} = require('gulp-sass-pedigree')(options);

gulp.task('sass:all', () => {

  return gulp
    .src('path/to/**/*.scss')
    .pipe(study())
    .pipe(sass())
    .pipe(gulp.dest('./dist'))
  ;
});

gulp.task('sass:watch', ['sass:all'], () => {
  
  return gulp
    .watch('path/to/**/*.scss', event => {
      
      return gulp
        .src(event.path)
        .pipe(getAncestors())    
        .pipe(sass())
        .pipe(gulp.dest('./dist'))
      ;
    })
  ;
});

```