Replies: 5 comments 2 replies
|
IgnorePlugin 中 tap 了 nmf(NormalModuleFactory) 和 cmf(ContextModuleFactory) 中的 beforeResolve hook,这两个是负责模块的创建,如果返回 false 则会忽略模块的创建,IgnorePlugin 判断模块路径是否符合你传入的正则,如果符合则会忽略该模块 |
2 replies
|
这个 tap 是不是 react 里面的概念(我没搞过react) |
0 replies
|
能不能给解释下这两个函数的作用呢 #[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!()
} |
0 replies
|
能否搞一个 hello world 版的插件出来,然后让其他贡献者知道,插件的运作流程是怎样的,每个步骤都起了什么作用等等(最小可行的插件) |
0 replies
|
我思来想去,感觉目前这个插件的模式太过复杂了,可以参考 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);当然了,返回值应该改成 |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
我刚开始查看这个项目,想贡献一下代码,在查看代码的时候,plugin介绍 和 一个例子 这个页,但是看不懂这俩插件是做什么用的,有没有简单的文档说明一下呢
All reactions