Skip to content

adrianosanti/gulp-resolve-dependencies

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

30 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

gulp-resolve-dependencies

Resolve dependency directives in assets, e.g. @depend (Juicer) or //= require (Sprockets)). Inspired by grunt-concat-in-order. Useful in combination with gulp-concat.

Usage

First, install gulp-resolve-dependencies as a development dependency:

npm install --save-dev gulp-resolve-dependencies

Then, add it to your gulpfile.js (probably together with gulp-concat):

var resolveDependencies = require('gulp-resolve-dependencies');
var concat = require('gulp-concat');

gulp.task('js', function(){
  gulp.src(['app/assets/js/main.js'])
    .pipe(resolveDependencies({
      pattern: /\* @requires [\s-]*(.*\.js)/g
    }))
        .on('error', function(err) {
            console.log(err.message);
        })
    .pipe(concat())
    .pipe(gulp.dest('dest/assets/js/'));
});

And use the directives in your JS files (dependencies can be nested, they are handled recursively):

/**
 * @requires libs/jquery/jquery.js
 * @requires ../modules/slideshow/slideshow.js
 */

(function(window, document, $, undefined) {
    'use strict';

    $(document).on('ready', function() {
        $('.slideshow').slideshow();
    });

})(window, document, jQuery);

Warning: This might not be very efficient (especially in case of nested dependencies). Some kind of caching mechanism could come in handy.

Circular dependencies are either silently ignored or emit an error. See options.ignoreCircularDependencies below.

API

resolveDependencies(options)

options.pattern

Type: RegExp

The matching pattern (defaults to /\* @requires [\s-]*(.*?\.js)/g).

options.resolvePath

Type: Function

Resolver for matched paths. Default:

function(match, targetFile) {
    return path.join(path.dirname(targetFile.path), match);
}

Parameters:

  • match {String} Matched file path (in the example above this would be libs/jquery/jquery.js and ../modules/slideshow/slideshow.js, respectively)
  • targetFile {Vinyl file object} Currently parsed file (where the matches were found)

The path package is available in this context.

options.log

Type: Boolean

Whether to log the resolved dependencies (defaults to false).

options.ignoreCircularDependencies

Type: Boolean

Whether to just continue instead of emitting an error if circular dependencies are detected (defaults to false).

Contributors

About

Gulp plugin to resolve asset dependencies

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • JavaScript 100.0%