Replies: 5 comments 2 replies
-
IgnorePlugin 中 tap 了 nmf(NormalModuleFactory) 和 cmf(ContextModuleFactory) 中的 beforeResolve hook,这两个是负责模块的创建,如果返回 false 则会忽略模块的创建,IgnorePlugin 判断模块路径是否符合你传入的正则,如果符合则会忽略该模块 |
Beta Was this translation helpful? Give feedback.
-
这个 tap 是不是 react 里面的概念(我没搞过react) |
Beta Was this translation helpful? Give feedback.
-
能不能给解释下这两个函数的作用呢 #[plugin_hook(NormalModuleFactoryBeforeResolve for IgnorePlugin)]
async fn nmf_before_resolve(&self, data: &mut ModuleFactoryCreateData) -> Result<Option<bool>> {
todo!()
}
#[plugin_hook(ContextModuleFactoryBeforeResolve for IgnorePlugin)]
async fn cmf_before_resolve(&self, data: BeforeResolveResult) -> Result<BeforeResolveResult> {
todo!()
} |
Beta Was this translation helpful? Give feedback.
-
能否搞一个 hello world 版的插件出来,然后让其他贡献者知道,插件的运作流程是怎样的,每个步骤都起了什么作用等等(最小可行的插件) |
Beta Was this translation helpful? Give feedback.
-
我思来想去,感觉目前这个插件的模式太过复杂了,可以参考 std 里的 Debug trait 来实现,我目前有这么一个思路,不知是否可行 trait Plugin {
fn apply(&self, ctx: &mut Context);
} 用一个上下文来来做总线,如果是插件自己的配置,可以放在插件结构体内部, 在 impl Context {
fn foo(&self) {
todo!()
}
fn foo2(&mut self, input: Input){
todo!()
}
//...
} 某个插件实现的时候,可以是这样的 impl Plugin for MyPlugin {
fn apply(&self, ctx: &mut Context){
ctx.foo();
ctx.foo2(self.input);
}
} 再有就是,在执行插件的地方,可以是这样的: let mut ctx = Context::new(...);
let plugin1 = MyPlugin::new(option1);
let plugin2 = MySecondPlugin::new();
plugin1.apply(&mut ctx);
plugin2.apply(&mut ctx); 当然了,返回值应该改成 |
Beta Was this translation helpful? Give feedback.
-
我刚开始查看这个项目,想贡献一下代码,在查看代码的时候,plugin介绍 和 一个例子 这个页,但是看不懂这俩插件是做什么用的,有没有简单的文档说明一下呢
Beta Was this translation helpful? Give feedback.
All reactions