如何在SWC编译器插件中获取Next.js配置传递的参数?
在SWC插件中获取Next.js传递的配置参数
你的Next.js配置传递参数的格式是正确的,下面分两种常见的SWC插件类型说明如何获取参数:
Rust编写的WASM插件(最常见)
定义配置结构体
通过serde定义与传递参数结构匹配的结构体,用于反序列化配置:use serde::Deserialize; #[derive(Deserialize)] struct PluginConfig { param: String, }在插件的transform方法中解析配置
实现SWC的Plugintrait时,transform方法的PluginTransformContext参数包含了传递的配置数据,将其反序列化为你定义的结构体即可:use swc_core::plugin::{Plugin, PluginTransformContext, TransformPluginProgramMetadata}; use swc_core::ecma::ast::Program; struct MyPlugin; impl Plugin for MyPlugin { fn transform( &mut self, program: Program, _metadata: TransformPluginProgramMetadata, plugin_transform_context: PluginTransformContext, ) -> Result<Program, swc_core::plugin::Error> { // 解析Next.js传递的JSON配置 let config: PluginConfig = serde_json::from_slice(plugin_transform_context.config) .map_err(|e| swc_core::plugin::Error::Custom(e.to_string()))?; // 验证参数是否获取成功 println!("从Next.js收到的参数: {}", config.param); // 在这里编写你的插件转换逻辑 Ok(program) } } SWC_PLUGIN!(MyPlugin);添加必要依赖
在Cargo.toml中确保包含相关依赖:[dependencies] serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" swc_core = { version = "0.75", features = ["plugin"] }
JavaScript编写的SWC插件
如果你的插件是用JS编写的,直接从transform函数的options参数中提取配置:
module.exports = function transform(program, options) { const { param } = options.config; console.log('从Next.js收到的参数:', param); // 编写你的转换逻辑 return program; };
注意事项
- 确保WASM插件编译后的文件路径正确,Next.js的
require.resolve能准确定位到插件文件。 - 运行Next.js时查看终端输出,确认参数是否被正确打印,以此验证配置是否传递成功。
内容的提问来源于stack exchange,提问作者Roman
相关产品推荐
相关产品推荐

