使用 npm 链接时如何修复“任务不在您的 gulpfile 中”错误?

Posted

技术标签:

【中文标题】使用 npm 链接时如何修复“任务不在您的 gulpfile 中”错误?【英文标题】:How to fix "Task is not in your gulpfile" error when using npm link? 【发布时间】:2015-05-12 09:34:51 【问题描述】:

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

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

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

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

那么对于每个应用,我们只需要做:

npm link gulp
npm link <our gulp plugin>

虽然这可行,但问题是 gulp 不再识别我们的任何自定义 gulp 任务。我运行的任何 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

“开发”任务在我的 gulp 插件中,为什么找不到?我的 gulpfile.js 只有这个:

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

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

【问题讨论】:

您能说明dev 任务是如何定义的吗? 像这样:gulp.task('dev', ['clean'], function() runSequence('bower', 'jsBuildDev', 'buildCSS', 'indexBuildDev'); ) ; 【参考方案1】:

想通了。在我的模块底部添加了以下行:

module.exports = gulp;

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

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

【讨论】:

不,这不是错字。 我认为@WilliamLepinski 的意思是您应该将. 更正为; 如果你选择只公开任务,你也可以只做module.exports = gulp.tasks然后在每个模块gulp.tasks = require('mygulpplugin') 奇怪的是我们必须这样做。我想知道,如果没有这样的问题,require-dir 方法是如何工作的? ***.com/questions/25518870/… 这种方法也包括其他文件的 gulp 任务,所以它应该会遇到同样的问题。 2 年后,这仍然是最简单的解决方案(至少对于我的用例而言)。我没有制作任何模块,只是尝试在多个文件夹之间共享 gulp 任务,这正是我想要的。【参考方案2】:

除了接受的答案之外,您还可以按照在 grunt 时代流行的方式进行操作,将 gulp 注入插件:

在插件中: 用以下方式包装所有内容:

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

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

在依赖于插件的 gulpfile 中,然后执行:

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

这样

您可以在主 gulpfile 中拥有多个插件,因为您不会覆盖 gulp.tasks。 插件不必在每个插件中声明gulp package.json 依赖项(npm install 的工作量更少)

【讨论】:

以上是关于使用 npm 链接时如何修复“任务不在您的 gulpfile 中”错误?的主要内容,如果未能解决你的问题,请参考以下文章

npm 审计修复后如何解决原型污染 lodash 需要人工审核

如何修复 npm 无法全局安装 typescript 错误

如何修复 npm 审计报告

安装 VueJS CLI 时如何修复 npm WARN deprecated 错误

如何在没有 sudo 的情况下修复 npm 抛出错误

如何修复 npm start “无法确定原生 SDK 版本”错误?