如何解决使用npm链接时的“任务不在你的大文件”错误?

我们有一堆应用程序共享通用的gulp逻辑,所以我们做了一个包含一大堆自定义任务的gulp插件。

但是,我们希望避免为我们开发的每个应用程序安装gulp +我们的插件(以及一半的互联网)。

理想情况下,我想这样做:

npm install -g gulp npm install -g <our gulp plugin> 

然后,对于每个应用程序,我们只需要做:

 npm link gulp npm link <our gulp plugin> 

虽然这是有效的,但问题是吞咽不再承认我们的任何自定义吞咽任务。 我运行的任何gulp命令的结果如下:

 [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 

“开发”任务是在我的大嘴插件,为什么不find它? 我的gulpfile.js只有这个:

 var gulp = require('gulp'); var mygulpplugin = require('mygulpplugin'); 

当gulp +插件安装在本地时,完全相同的过程可以工作。 任何想法为什么?

弄清楚了。 在我的模块的底部添加了以下行:

 module.exports = gulp; 

我在每个模块中的gulpfile如下所示:

 var gulp = require('gulp'); var mygulpplugin = require('mygulpplugin'); gulp.tasks = mygulpplugin.tasks; 

除了被接受的答案之外,你可以按照stream行在咕噜声中的方式来做到这一点,在那里你注入了一些插件:

在插件中:包装一切:

 module.exports = function(gulp) { gulp.task('foo', function () { ... }) ... } 

并从插件的文件中移除require('gulp')

依赖插件的gulp文件中,您可以这样做:

 var gulp = require('gulp'); require('my-gulp-plugin')(gulp) 

那样

  • 你可以在主要的gulp文件中有多个插件,因为你不会覆盖gulp.tasks
  • 插件不需要在每个插件中声明一个package.json依赖项(对于npm install来说工作较less)