We have a bunch of applications sharing common gulp logic, so we made a gulp plugin that contains a bunch of custom tasks.
However we'd like to avoid installing gulp+our plugin (along with half the internet) for each of the applications we develop.
Ideally, I'd like to do:
npm install -g gulp
npm install -g <our gulp plugin>
Then for each app, we'd simply have to do:
npm link gulp
npm link <our gulp plugin>
Although this works, the problem is gulp no longer recognizes any of our custom gulp tasks. Any gulp command I run results in:
[15:16:51] Using gulpfile /workspace/my-app/gulpfile.js
[15:16:51] Task 'dev' is not in your gulpfile
[15:16:51] Please check the documentation for proper gulpfile formatting
The 'dev' tasks is in my gulp plugin, why isn't it finding it? My gulpfile.js only has this:
var gulp = require('gulp');
var mygulpplugin = require('mygulpplugin');
The exact same process works when gulp + the plugin is installed locally. Any ideas why?
Figured it out. Added the following line at the bottom of my module:
module.exports = gulp;
And my gulpfile in each module looks like this:
var gulp = require('gulp');
var mygulpplugin = require('mygulpplugin');
gulp.tasks = mygulpplugin.tasks;
Alternatively to the accepted answer, you can do it the way that was popular in grunt times, where you inject gulp to the plugin:
In plugin: wrap everything with:
module.exports = function(gulp) {
gulp.task('foo', function () {
...
})
...
}
and remove require('gulp')
from the plugin's file.
In gulpfile that depends on plugin you then do:
var gulp = require('gulp');
require('my-gulp-plugin')(gulp)
That way
gulp.tasks
.gulp
a package.json
dependency in each of the plugins (less work for npm install
)If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With