gpt4 book ai didi

javascript - 在具有通过 gulp-submodule 注入(inject)的依赖项的模块上运行 gulp 任务失败,而该模块又通过 gulp-submodule 具有自己的依赖项

转载 作者:行者123 更新时间:2023-11-29 21:07:58 27 4
gpt4 key购买 nike

标题可能听起来有点含糊,但这里有一个错误的例子。假设我们有三个模块 ModuleAModuleBModuleC,因此 ModuleA 依赖于 ModuleBModuleB 依赖于 ModuleC。当我们需要针对 ModuleA 运行任务时,我们通常还需要针对其依赖项运行一些任务 - ModuleBModuleC 而这就是 gulp -submodule 开始发挥作用。 Gulp-submodule 让我们定义依赖模块的任务与其依赖项之间的依赖关系,以便依赖模块的任务触发其依赖项的适当任务。

如果我们有一个平面结构,即 SomeModule 依赖于一堆没有自己依赖性的其他模块,这就很好用了。然而,一旦这些依赖项中的任何一个具有自己的依赖项,整个生态系统就会崩溃,并显示一条模糊的错误消息,告知 gulp 无法找到特定任务。

这是演示代码。要在本地环境中对此进行测试,必须至少将 gulp 安装为全局包,并将 gulp 和 gulp-submodule 安装为项目的本地包。

module-a.gulpfile.js

const gulp = require("gulp");
require("gulp-submodule")(gulp);

gulp.submodule("module-b", {filepath: "module-b.gulpfile.js"});

gulp.task("default", ["module-b:default"], () => {
console.log("Running task 'default' for module 'module-a'...");
});

module-b.gulpfile.js

const gulp = require("gulp");
require("gulp-submodule")(gulp);

gulp.submodule("module-c", {filepath: "module-c.gulpfile.js"});

gulp.task("default", ["module-c:default"], () => {
console.log("Running task 'default' for module 'module-b'...");
});

module-c.gulpfile.js

const gulp = require("gulp");

gulp.task("default", [], () => {
console.log("Running task 'default' for module 'module-c'...");
});

在 module-a.gulpfile.js 上运行任务“default”后,您会得到类似于以下的输出:

gulp --gulpfile module-a.gulpfile.js
[07:15:27] Using gulpfile module-a.gulpfile.js
[07:15:27] Task 'module-b:module-c:default' is not in your gulpfile
[07:15:27] Please check the documentation for proper gulpfile formatting

人们可能会注意到,gulp 正在寻找名为“module-b:module-c:default”的特定任务,尽管在任何项目文件中都没有定义或引用具有此类名称的任务。

最佳答案

这个奇怪的不存在的任务来自 gulp-submodule 处理模块和任务之间依赖关系的方式。简单来说,它执行以下操作:

  1. 首先,在这个调用中 gulp.submodule("module-b", {filepath: "module-b.gulpfile.js"}) gulp-submodule 临时替换了原来的 gulp .task 并将指定的 gulpfile 作为模块加载。
  2. 加载 gulpfile 时,它​​会获取修改后的 gulp 实例,其中任务方法通过在其前面添加模块名称和分隔符(默认为“:”)来修改作为其参数提交的任务的名称。<
  3. 稍后,当 gulp 运行模块“module-a”的任务“default”时,它遇到了一个我们引用为“module-b:default”的依赖项,这正是为任务“default”构造的特殊名称' 模块 'module-b' 在第 2 步中。

如果依赖层级超过一层,这个简单的逻辑就会中断,因为调用 gulp.submodule("module-c", {filepath: "module-c.gulpfile.js"})来自 module-b.gulpfile.js 的结果是 gulp.task 被包装 第二次通过 gulp-submodule,因此模块“module-c”的任务“default”的名称被添加了两次:首先是“module-c”,然后是“module-b”。

为了快速解决这个问题,我已经提交了一个快捷修复到我们原始子模块的私有(private):5864ae5 (gulp-submodule)。这只是一个快速修复,绝对不是最好的,但它对我有用。我会更新这个答案,我是否应该为这个问题提供更可靠的解决方案。

关于javascript - 在具有通过 gulp-submodule 注入(inject)的依赖项的模块上运行 gulp 任务失败,而该模块又通过 gulp-submodule 具有自己的依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43060963/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com