Rust Plugin Api
备注
本文档仅涵盖插件钩子详情。 有关如何创建、构建和发布 rust 插件,请参阅:编写 Rust 插件
配置 Rust 插件
通过 plugins 选项添加 Rust 插件:
farm.config.ts
import { defineConfig } from "@farmfe/core";
export default defineConfig({
  // 在 plugins 中配置
  plugins: [
    ['@farmfe/plugin-sass', { /** 插件选项 */ }]
  ],
});
在字符串中配置 Rust 插件包名称(或路径),并在对象中配置其选项。
编写 Rust 插件
有关详细信息,请参阅编写 Rust 插件。
插件 Hook 概述
Farm 提供了很多 rollup 风格的 hook,这些 hook 分为 build 阶段和 generate 阶段:

所有插件挂钩都接受一个名为 CompilationContext 的参数。 所有共享的编译信息都存储在 context 中。
Hook 共有三种(与 Rollup 相同):
- first:钩子串行执行,当钩子返回非空值时立即返回。 (null 在 JS 中表示 null 和 undefined,在 Rust 中表示 None)。
- serial: 钩子串行执行,每个钩子的结果将传递到下一个钩子,使用最后一个钩子的结果作为最终结果。
- parallel:钩子在线程池中并行执行,并且 应该被隔离。
备注
有关完整的 Plugin Hooks  定义,请参阅Plugin Trait
name
- required: true
- default:
fn name(&self) -> &str;
返回此插件的名称。 例子:
impl Plugin for MyPlugin {
  fn name(&self) -> &str {
    "MyPlugin"
  }
}
priority
- required: false
- default:
fn priority(&self) -> i32 {
  100
}
定义该插件的优先级,值越大,该插件越早执行。 当插件具有相同优先级时,它们将按照与plugins中注册的顺序相同的顺序执行。
备注
默认情况下,所有自定义插件的优先级都是 100。有些内部插件的优先级是 99,比如 plugin-script、plugin-css,您可以覆盖默认优先级时内部插件的行为。 但是一些内部插件的优先级是101,比如plugin-resolve,plugin-html,如果你想覆盖默认行为, 你应该设置一个更大的优先级。
config
- required: false
- hook type: serial
- default:
fn config(&self, _config: &mut Config) -> Result<Option<()>> {
  Ok(None)
}
在编译开始之前在config钩子中修改配置。 Config 结构体的定义请参考Config。 例子:
impl Plugin for MyPlugin {
  // 实现 config hook
  fn config(&self, config: &mut Config) -> Result<Option<()>> {
    // 设置 minify 为 false 
    config.input.insert("custom-entry", "./custom.html");
    Ok(Some(()))
  }
}
请注意, Rust Plugin 的 config 钩子是在 JS Plugin 的 config 和 configResolved 钩子之后调用的。