AWS
内部插件系统

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
})