Next.js项目构建失败:静态页面生成阶段触发TypeError错误
Next.js项目构建失败:静态页面生成阶段触发TypeError错误
嘿,这种编译后变量混淆的错误确实挺头疼的,我之前也踩过类似的坑。先把你遇到的错误信息贴出来方便定位:
Generating static pages (0/20) [= ] TypeError: u is not a function at m (C:\Users\coool\Documents\AnalyticsBrewery\analytics-brewery-a1\.next\server\app\(brewery)\test\Customers\page.js:1:9038) at em (C:\Users\coool\Documents\AnalyticsBrewery\analytics-brewery-a1\node_modules\next\dist\compiled\next-server\app-page.runtime.prod.js:12:131226) at C:\Users\coool\Documents\AnalyticsBrewery\analytics-brewery-a1\node_modules\next\dist\compiled\next-server\app-page.runtime.prod.js:12:142926 at Array.toJSON (C:\Users\coool\Documents\AnalyticsBrewery\analytics-brewery-a1\node_modules\next\dist\compiled\next-server\app-page.runtime.prod.js:12:146504) at stringify (<anonymous>) at eR (C:\Users\coool\Documents\AnalyticsBrewery\analytics-brewery-a1\node_modules\next\dist\compiled\next-server\app-page.runtime.prod.js:12:134889) at eP (C:\Users\coool\Documents\AnalyticsBrewery\analytics-brewery-a1\node_modules\next\dist\compil...
下面是几个大概率能解决问题的排查方向:
优先排查目标页面的函数调用逻辑
编译后的u是混淆后的变量名,实际问题肯定出在你的app/(brewery)/test/Customers/page.js源码里。你要逐行检查所有带()的函数调用:有没有把一个非函数的变量(比如API返回的对象、数组、普通字符串)当成函数去执行?比如不小心写了const res = await fetch('/api/data'); res()这种错误代码,而res其实是响应对象不是函数。检查静态生成时的数据处理
错误发生在Generating static pages阶段,说明问题和SSG(静态站点生成)的逻辑强相关。如果你用了App Router的异步数据获取,或者getStaticProps,要确认:- 异步函数的返回值是不是符合预期的类型
- 有没有在构建阶段无法获取到的数据(比如依赖用户登录状态的内容),导致后续逻辑出错
临时切换渲染模式测试
你可以在page.js顶部加一行代码:export const dynamic = 'force-dynamic';强制页面使用服务端渲染(SSR),如果这样构建不报错了,那就能确定问题出在静态生成时的数据处理逻辑上,再针对性去修改。
排查第三方依赖或自定义Hook
看看页面里用到的第三方库、UI组件或者自己写的自定义Hook,有没有哪里存在“把非函数当函数调用”的情况。比如某些状态管理库的用法错误,或者解构赋值时把变量和函数搞混了(比如const { data } = useCustomHook(); data()但data其实是对象)。
备注:内容来源于stack exchange,提问作者Sreenivas Angara
相关产品推荐
相关产品推荐

