How to fix "Task is not in your gulpfile" error when using npm link?
Solution 1
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;
Solution 2
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
- you can have multiple plugins in the main gulpfile, because you don't override
gulp.tasks
. - plugins don't have to declare
gulp
apackage.json
dependency in each of the plugins (less work fornpm install
)
zedix
Updated on July 09, 2022Comments
-
zedix almost 2 years
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?
-
zedix almost 9 yearsNo, it is not a typo.
-
Ivan Carosati over 8 yearsI think @WilliamLepinski meant you should correct
.
to;
. -
Clay over 8 yearsYou can also just do
module.exports = gulp.tasks
then in each modulegulp.tasks = require('mygulpplugin')
if you choose to only expose the tasks -
JustAMartin over 8 yearsThat's strange that we have to do this. I wonder, how require-dir approach works then without such an issue? stackoverflow.com/questions/25518870/… This approach too includes gulp tasks from other files, so it should suffer form the same problem.
-
matthewpavkov over 6 years2 years later and this is still the simplest solution (at least for my use case). I'm not making any modules, just trying to share gulp tasks between multiple folders and this did exactly what I wanted.