求助:Turborepo monorepo中Next.js应用的条件导出与包大小异常
Turborepo + Next.js Monorepo 问题求助
项目结构如下:
. └── root ├── apps │ ├── first-app (next.js app) │ └── second-app (next.js app) ├── configs (ts, tsup) └── packages └── ui (react lib)
问题1:Next.js应用无法识别可构建包的mjs/cjs条件导出
重现步骤
# second-app构建会失败 pnpm build second-app...
预期行为
Next.js应用应能解析mjs/cjs条件导出
临时解决办法
修改产物扩展名改为js,具体操作如下:
- 修改
./configs/tsup.config.base.ts:
// 替换为: outExtension({ format }) { return { js: `.${format === "esm" ? "esm.js" : "cjs.js"}` // 此方式可行 } }
- 修改
./packages/ui/package.json:
// 替换为: "exports": { ".": { "import": "./.build/index.esm.js", "require": "./.build/index.cjs.js" } },
问题2:包大小不一致
重现步骤
# 先完成上述修改确保构建正常 # first-app首次加载JS大小为92kb pnpm build --filter first-app # second-app首次加载JS大小为143kb pnpm build --filter second-app...
预期行为
first-app和second-app均基于Next.js/MUI模板,仅second-app从ui包导入部分MUI/emotion代码,二者首次加载JS大小应相近,但实际相差约50kb。
临时解决办法
暂无,因对打包工具经验有限,暂未找到合适解决方案。
内容的提问来源于stack exchange,提问作者Hubiwan
相关产品推荐
相关产品推荐

