使用Turborepo时,Next.js与应用路由器,服务器端代码无法使用node.js deps构建

dy1byipe  于 2023-08-04  发布在  Node.js
关注(0)|答案(1)|浏览(139)

我正在将现有的Next.js项目迁移到Turborepo monorepo。
Next.js项目使用最新的App Router,并且具有服务器端路由和组件,这些路由和组件以前都在Turborepo之外成功构建,但现在似乎无法构建,因为它们被视为客户端代码并且正在加载服务器端节点模块(主要是firebase-admin)。我在package.json中的依赖项都没有更改版本。
下面是一个应该被视为服务器组件的示例页面。/src/app/example/[document_id]/page.js

import { db } from "@/app/api/firebase-admin"
// import components

export default async function Page({ params: { document_id } }) {
    const docSnapshot = await db.collection('docs').doc(document_id).get();
    if (docSnapshot.exists) {
        const data = docSnapshot.data();
        return <Document {...data} />
    }
    return <NotFound />
}

字符串
上面的代码在一个独立的Next.js项目中构建得很好,但是在Turborepo中抱怨像Can't resolve 'fs' in @google/cloud/...这样的东西,这让我认为它试图为客户端包打包服务器端模块。
任何帮助解决这个问题是非常感谢。
编辑:在这里想提一下,我的项目是根据标准结构的,与示例here相同

rbl8hiat

rbl8hiat1#

从我在turborepo code here中看到的情况来看,您可能需要在下一个项目上方设置Turbo,让turborrepo从那里完成缓存和捆绑的工作。如第6行所示,它明确提到turbo repo的构建依赖于现有的nextjs构建。
希望这能帮上忙。

相关问题