Gulp 4 由于缺少获取功能,使用 Gulp-Hub 跨多个文件拆分任务失败

Posted

技术标签:

【中文标题】Gulp 4 由于缺少获取功能,使用 Gulp-Hub 跨多个文件拆分任务失败【英文标题】:Gulp 4 Split Tasks Across Multiple Files Using Gulp-Hub Fails Due to Missing Get Function 【发布时间】:2016-11-26 02:44:46 【问题描述】:

使用 Gulp 4 和 recipe 使用 gulp-hub 将我的任务拆分为多个文件会在尝试加载任务文件时引发此错误。任务文件非常简单,只是想测试一切是否正常。

我在 Github 上的 Undertaker 上找到了这个关于 get 函数的参考资料,但我真的不明白他们想说什么,而且似乎 gulp-hub 应该在做这项工作。

还有其他人遇到过这个问题并知道如何解决吗?

Gulp 文件

'use strict';

var gulp = require('gulp');

var HubRegistry = require('gulp-hub');

// Load some files into the registry
var hub = new HubRegistry(['gulp/tasks/*.js']); // only one file help.js

// Tell gulp to use the tasks just loaded
gulp.registry(hub);

帮助任务 - /gulp/tasks/help.js

'use strict';

var gulp = require('gulp');

gulp.task('help', []);

引发错误

$ gulp help
[01:36:37] Loading gulp\tasks\help.js

D:\projects\app\node_modules\undertaker\lib\helpers\validateRegistry.js:36
      throw err;
      ^
 AssertionError: Custom registry must have `get` function
    at validateRegistry (D:\projects\app\node_modules\undertaker\lib\helpers\validateRegistry.js:28:5)
    at Gulp.registry (D:\projects\app\node_modules\undertaker\lib\registry.js:17:3)
    at Object.<anonymous> (D:\projects\app\gulpfile.js:11:6)
    at Module._compile (module.js:541:32)
    at Object.Module._extensions..js (module.js:550:10)
    at Module.load (module.js:458:32)
    at tryModuleLoad (module.js:417:12)
    at Function.Module._load (module.js:409:3)
    at Module.require (module.js:468:17)
    at require (internal/module.js:20:19)

【问题讨论】:

【参考方案1】:

您可能正在运行 gulp-hub@0.8.0,这是当前发布到 npm 的版本,专为 gulp 3.x 设计。

对于 gulp 4.x,您需要从 development branches on GitHub 之一安装 gulp-hub。目前有4.0registry-init

4.0 分支现在无法工作,因为它无法通过 undertaker 的 registry validation。

registry-init 分支似乎可以工作。你可以这样安装:

npm uninstall gulp-hub
npm install --save-dev frankwallis/gulp-hub#registry-init

【讨论】:

谢谢,已解决 自 2017-12-31 起 gulp-hub 可以使用 npm install --save-dev gulp-hub@next 简单地安装(与 gulp 相同的标签自同一日期起使用)【参考方案2】:

2016 年 10 月 12 日更新

我与 yeoman-fountainjs 合作,在他们的 package.json 中定义了以下开发依赖项,这就像一个魅力:

"gulp": "gulpjs/gulp#4ed9a4a3275559c73a396eff7e1fde3824951ebb",
"gulp-hub": "frankwallis/gulp-hub#d461b9c700df9010d0a8694e4af1fb96d9f38bf4",

【讨论】:

【参考方案3】:

我遇到了同样的错误,但这是因为我未能将任务正确地暴露给 Gulp。

起初我在我的 help.js 文件中使用这样的 CommonJS 并得到同样的错误: exports.help = help;

所以我将其更改为 Gulp 任务并且它起作用了: gulp.task("help", help);

【讨论】:

以上是关于Gulp 4 由于缺少获取功能,使用 Gulp-Hub 跨多个文件拆分任务失败的主要内容,如果未能解决你的问题,请参考以下文章

Gulp 安装权限问题

是否有一些 gulp 插件可以让它执行静态站点生成器的功能?

Laravel_Elixir_gulp任务利器安装

gulp 安装时一直提示缺少模块( Cannot find module 'gulp-load-plugins')

运行 gulp 时出错,缺少绑定,node-sass 找不到绑定

[译] Gulp 4 入门指南