New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

gulp-resolve-dependencies

Package Overview
Dependencies
Maintainers
1
Versions
15
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

gulp-resolve-dependencies

Resolve dependency directives in assets (e.g. "@requires" or "//= require" in JavaScript)

  • 4.1.0
  • latest
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
154
decreased by-64.19%
Maintainers
1
Weekly downloads
 
Created
Source

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.

gulp.src will not necessarily return files in a deterministic way. If this turns out to be an issue, using a plugin like gulp-sort or gulp-order right after gulp.src might be an option for you. Thanks to @fabiospampinato for pointing this out.

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.

Returning a falsy value will ignore the resolved path:

function(match, targetFile) {
    // Ignore `/lib.js`
    if (match.match(/\/lib\.js$/)) {
        return null;
    }

    return path.join(path.dirname(targetFile.path), match);
}
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).

options.include

Type: Array

Only dependencies matching this array of absolute paths will be included (defaults to []).

options.exclude

Type: Array

Dependencies matching this array of absolute paths will be excluded (defaults to []).

Contributors

Keywords

FAQs

Package last updated on 13 Jul 2021

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc