OpenNext 内部使用 3 个不同的 esbuild 插件,根据某些条件(如 next 版本或使用的运行时)重新编译或修改源代码
OpenNext 替换插件
此插件用于将源代码中的某些代码替换为其他代码。
这是一个非常简单的使用示例:
openNextPlugin({
// 要替换代码的目标文件
target: /plugins\/default\.js/g,
// 插件将在此处查找要替换的代码
replacements: [require.resolve("./plugins/default.js")],
// 这是要从目标文件中删除某些代码
deletes: ["id1"],
})
// 通过使用(文件顶部的 import)注入任意代码:
//#import
import data from 'data'
const datum = data.datum
//#endImport
替换代码:
//#override id1
export function overrideMe() {
// 我将替换目标文件中的 "id1" 块
}
//#endOverrideOpenNext 解析插件
此插件用于避免在最终捆绑包中捆绑整个库。它将把覆盖项的动态导入替换为我们想要使用的那个。
这是一个非常简单的使用示例:
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
})