async setup()

in esbuild.base.ts [71:130]


          async setup(build) {
            const distFile = [];
            const esFile = [];
            build.onLoad({ filter: /(\.tsx)$/ }, async (args) => {
              const distPath = args.path
                ?.replace('src', 'dist')
                .replace('tsx', 'js');
              const esPath = args.path
                ?.replace('src', 'es')
                .replace('tsx', 'js');
              distFile.push(distPath);
              esFile.push(esPath);
            });
            build.onEnd(async (buildResult) => {
              if (buildResult.errors?.length) {
                return null;
              }
              const { outputs } = buildResult?.metafile || {};

              const assets = Object.keys(outputs);
              assets.forEach((asset) => {
                if (asset.endsWith('.js')) {
                  const assetPath = `${process.cwd()}/${asset}`;
                  fs.readFile(assetPath, 'utf8', (readErr, data) => {
                    if (readErr) console.error(`构建失败: ${readErr}`);
                    if (!data) return;
                    if (
                      data.match(
                        /(import_react\.default\.memo|import_react\.default\.forwardRef|React\.forwardRef|React\.memo|\.less)/gm,
                      )
                    ) {
                      /**
                       * 1、将js中less改css引入
                       * 2、处理esbuild构建在forwardRef、memo场景不会注入PURE
                       * https://github.com/evanw/esbuild/issues/3492
                       */
                      const result = data
                        .replace('.less', '.css')
                        .replace(
                          /(import_react\.default\.memo|import_react\.default\.forwardRef|React\.forwardRef|React\.memo)/gm,
                          `/* @__PURE__ */ $1`,
                        );
                      fs.writeFile(assetPath, result, (writeErr) => {
                        if (writeErr) console.error(`构建失败: ${writeErr}`);
                      });
                    }
                  });

                  if (
                    asset.endsWith('.types.js') &&
                    assetPath.includes('/es/')
                  ) {
                    fs.writeFile(assetPath, 'export {};', (writeErr) => {
                      if (writeErr) console.error(`构建失败: ${writeErr}`);
                    });
                  }
                }
              });
            });
          },