OpenNext 内部使用了 3 种不同的 esbuild 插件,根据 Next.js 版本或使用的运行时等条件来重新编译或修改源代码
OpenNext 替换插件
该插件用于将源代码中的部分代码替换为其他代码。
以下是一个简单的使用示例:
openNextPlugin({
// 要替换代码的目标文件
target: /plugins\/default\.js/g,
// 插件将在此处查找要替换的代码
replacements: [require.resolve("./plugins/default.js")],
// 用于从目标文件中删除某些代码
deletes: ["id1"],
})
// 通过以下方式注入任意代码(在文件顶部导入):
//#import
import data from 'data'
const datum = data.datum
//#endImport
替换代码的方式:
//#override id1
export function overrideMe() {
// 我将替换目标文件中的 "id1" 代码块
}
//#endOverride
OpenNext 解析插件
该插件用于避免在最终打包中包含整个库。它会将动态导入的覆盖内容替换为我们想要使用的版本。
以下是一个简单的使用示例:
openNextResolvePlugin({
overrides: {
wrapper: "node",
converter: "node",
},
});
OpenNext Edge 运行时插件
该插件用于正确编译为 edge
运行时构建的路由或中间件。
以下是一个简单的使用示例:
openNextEdgePlugin({
// .next 目录的路径
nextDir: "next",
// 用于打包路由的 edgeFunctionHandler.js 文件路径
edgeFunctionHandlerPath: "./edgeFunctionHandler.js",
// 来自中间件清单文件的 middlewareInfo
middlewareInfo: middlewareInfo
// 是否应为 Cloudflare Workers 打包应用
isInCloudflare: true
})