Loads in any gulp plugins and attaches them to the global scope, or an object of your choice.
$ npm install --save-dev gulp-load-plugins
Given a package.json
file that has some dependencies within:
{
"dependencies": {
"gulp-jshint": "*",
"gulp-concat": "*"
}
}
Adding this into your Gulpfile.js
:
var gulp = require('gulp');
var gulpLoadPlugins = require('gulp-load-plugins');
var plugins = gulpLoadPlugins();
Or, even shorter:
var plugins = require('gulp-load-plugins')();
Will result in the following happening (roughly, plugins are lazy loaded but in practice you won't notice any difference):
plugins.jshint = require('gulp-jshint');
plugins.concat = require('gulp-concat');
You can then use the plugins just like you would if you'd manually required them, but referring to them as plugins.name()
, rather than just name()
.
This frees you up from having to manually require each gulp plugin.
You can pass in an object of options that are shown below: (the values for the keys are the defaults):
gulpLoadPlugins({
pattern: ['gulp-*', 'gulp.*'], // the glob(s) to search for
config: 'package.json', // where to find the plugins, by default searched up from process.cwd()
scope: ['dependencies', 'devDependencies', 'peerDependencies'], // which keys in the config to look within
replaceString: /^gulp(-|\.)/, // what to remove from the name of the module when adding it to the context
camelize: true, // if true, transforms hyphenated plugins names to camel case
lazy: true, // whether the plugins should be lazy loaded on demand
rename: {} // a mapping of plugins to rename
});
From 0.8.0, you can pass in an object of mappings for renaming plugins. For example, imagine you want to load the gulp-ruby-sass
plugin, but want to refer to it as just sass
:
gulpLoadPlugins({
rename: {
'gulp-ruby-sass': 'sass'
}
});
gulp-load-plugins
comes with npm scope support. The major difference is that scopped plugins are accessible through a variable on plugins
that represents the scope. For example, if the plugin is @myco/gulp-test-plugin
then you can access the plugin as shown in the following example:
var plugins = require('gulp-load-plugins')();
plugins.myco.testPlugin();
In 0.4.0 and prior, lazy loading used to only work with plugins that return a function. In newer versions though, lazy loading should work for any plugin. If you have a problem related to this please try disabling lazy loading and see if that fixes it. Feel free to open an issue on this repo too.
Credit largely goes to @sindresorhus for his load-grunt-plugins plugin. This plugin is almost identical, just tweaked slightly to work with Gulp and to expose the required plugins.
- add support for npm-scoped plugins. PR - thanks @hbetts
- fixed a bug where gulp-load-plugins would use the right
package.json
file but the wrongnode_modules
directory - thanks @callumacrae
- add the ability to rename plugins that gulp-load-plugins loads in.
- add
files
property to package.json so only required files are downloaded when installed - thanks @shinnn
- support loading plugins with a dot in the name, such as
gulp.spritesmith
- thanks to @MRuy - upgrade multimatch to 1.0.0
- Fix issues around plugin picking wrong package.json file - thanks @iliakan (see issue).
- Show a nicer error if the plugin is unable to load any configuration and hence can't find any dependencies to load
- Swap out globule for multimatch, thanks @sindresorhus.
- Updated some internal dependencies which should see some small improvements - thanks @shinnn for this contribution.
- improved lazy loading so it should work with plugins that don't just return a function. Thanks to @nfroidure for help with this.
- plugins are lazy loaded for performance benefit. Thanks @julien-f for this.
- turn the
camelize
option on by default
- added
camelize
option, thanks @kombucha. - renamed to
gulp-load-plugins
.
- add link to this repository into
package.json
(thanks @ben-eb).
- move to
gulpLoadplugins
returning an object with the tasks define.
- added
replaceString
option to configure exactly what gets replace when the plugin adds the module to the context
- fixed keyword typo so plugin appears in search for gulp plugins
- removed accidental console.log I'd left in
- fixed accidentally missing a dependency out of package.json
- initial release