You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Next.js会将JS Chunks打包进无需JavaScript的静态页面?

解决Next.js静态/SSG页面加载冗余JS Chunks的问题

问题成因

从你提供的构建输出能看到,静态页面(404)和SSG页面(/posts/firstpost)加载了包含framework、main在内的共享JS Chunks,总大小近80kB。这是因为Next.js默认会加载这些全局依赖完成客户端hydration,即便页面完全不需要交互。

可行解决方案

1. 单页面禁用客户端运行时JS

对不需要交互的页面,在getStaticProps中添加unstable_runtimeJS: false:

// pages/404.js 或 pages/posts/firstpost.js
export async function getStaticProps() {
  return {
    props: {},
    unstable_runtimeJS: false, // 关闭客户端JS
  };
}

⚠️ 注意:该选项为实验性特性,仅适用于完全无客户端交互的页面。

2. 精简_app.js的全局依赖

检查_app.js是否引入了仅部分页面需要的依赖(如全局状态库、交互组件)。对这类依赖,改用dynamic动态导入并设置ssr: false,或移至具体页面中,避免全局加载冗余代码。

3. 切换至静态导出模式

若站点全为静态内容,使用静态导出命令生成纯HTML/CSS文件:

next build && next export

此模式不支持SSR和API路由,但能彻底移除Next.js框架JS。

4. 清理页面中的客户端专属代码

确保静态页面组件中无window/document等客户端专属API引用,无需要在客户端运行的hooks。如有,需移除或用typeof window !== 'undefined'做条件包裹。

验证修改

重新执行next build,查看对应页面的First Load JS大小,冗余JS应大幅减少。

内容的提问来源于stack exchange,提问作者quiltedbread

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 17:45:39