当前位置: 首页 > news >正文

Next.js 项目生产构建优化

Next.js 项目生产构建优化的完整教程,涵盖配置、工具链和性能调优技巧,助你显著加速 npm run build

注:学习阶段请先测试环境使用!

文章目录

    • @[toc]
      • 一、基础优化
        • 1. 确保使用最新版本
        • 2. 清理无用依赖和代码
        • 3. 配置 `next.config.js` 基础优化项
      • 二、Webpack 优化
        • 1. 启用多线程压缩(TerserPlugin)
        • 2. 启用持久化缓存
      • 三、环境与构建参数优化
        • 1. 增加 Node.js 内存限制
        • 2. 选择性生成静态页面
      • 四、使用分析工具
        • 1. 构建产物分析
        • 2. 构建时间分析
      • 五、硬件级优化
        • 1. 使用 SSD 磁盘
        • 2. 增加 CPU 核心
        • 3. 使用 SWC 替代 Babel(Next.js 13+ 默认)
      • 六、高级技巧
        • 1. 模块联邦(微前端场景)
        • 2. 增量构建(仅限 monorepo)
      • 七、优化效果验证
        • 1. 构建时间对比
        • 2. 产物大小检查
      • 优化前后对比示例
      • 注意事项

一、基础优化

1. 确保使用最新版本
npm update next react react-dom --save
2. 清理无用依赖和代码
# 分析包大小
npx depcheck
npx npm-check-unused
3. 配置 next.config.js 基础优化项
// next.config.js
module.exports = {
  productionBrowserSourceMaps: false, // 关闭生产环境 SourceMap
  compress: true, // 启用 Gzip/Brotli 压缩
  images: {
    formats: ['image/webp'], // 优先生成 WebP 格式
    minimumCacheTTL: 3600, // 图片缓存时间
  },
};

二、Webpack 优化

1. 启用多线程压缩(TerserPlugin)
npm install terser-webpack-plugin --save-dev
// next.config.js
const TerserPlugin = require('terser-webpack-plugin');

module.exports = {
  webpack: (config) => {
    config.optimization.minimizer = [
      new TerserPlugin({
        parallel: true, // 启用多线程
        terserOptions: {
          compress: { drop_console: true }, // 移除 console
        },
      }),
    ];
    return config;
  },
};
2. 启用持久化缓存
// next.config.js
module.exports = {
  webpack: (config, { dev, isServer }) => {
    if (!dev && !isServer) {
      config.cache = {
        type: 'filesystem',
        buildDependencies: {
          config: [__filename],
        },
      };
    }
    return config;
  },
};

三、环境与构建参数优化

1. 增加 Node.js 内存限制
# 在 package.json 中修改
"scripts": {
  "build": "NODE_OPTIONS='--max-old-space-size=4096' next build"
}
2. 选择性生成静态页面
# 仅构建必要页面(适用于部分静态站点)
next build --profile --debug

四、使用分析工具

1. 构建产物分析
npm install @next/bundle-analyzer --save-dev
// next.config.js
const withBundleAnalyzer = require('@next/bundle-analyzer')({
  enabled: process.env.ANALYZE === 'true',
});

module.exports = withBundleAnalyzer({});
ANALYZE=true npm run build
2. 构建时间分析
npm install --save-dev speed-measure-webpack-plugin
// next.config.js
const SpeedMeasurePlugin = require('speed-measure-webpack-plugin');
const smp = new SpeedMeasurePlugin();

module.exports = smp.wrap({
  // 原有配置
});

五、硬件级优化

1. 使用 SSD 磁盘
  • 机械硬盘 → SSD 可提升 50% 以上构建速度
2. 增加 CPU 核心
  • Webpack 并行处理能力与 CPU 核心数正相关
3. 使用 SWC 替代 Babel(Next.js 13+ 默认)
// next.config.js
module.exports = {
  experimental: {
    forceSwcTransforms: true, // 强制使用 SWC
  },
};

六、高级技巧

1. 模块联邦(微前端场景)
// next.config.js
const { ModuleFederationPlugin } = require('webpack').container;

module.exports = {
  webpack: (config) => {
    config.plugins.push(
      new ModuleFederationPlugin({
        name: 'host',
        remotes: {
          app1: 'app1@http://localhost:3001/remoteEntry.js',
        },
      })
    );
    return config;
  },
};
2. 增量构建(仅限 monorepo)
# 使用 Turborepo 加速 monorepo 构建
npm install turbo --save-dev
// package.json
"scripts": {
  "build": "turbo run build"
}

七、优化效果验证

1. 构建时间对比
# 优化前
time npm run build

# 优化后
time npm run build
2. 产物大小检查
ls -lh .next/static/chunks

优化前后对比示例

优化项构建时间 (s)产物大小 (MB)
默认配置12045
基础优化 + Webpack8538
全量优化5232

注意事项

  1. 部分优化(如 drop_console)需根据项目需求选择
  2. 缓存可能导致构建结果不一致,必要时清理 .next/cache
  3. 生产环境务必关闭 productionBrowserSourceMaps

按此方案优化后,多数项目构建速度可提升 30%~70%。建议逐步实施并验证效果!

http://www.dtcms.com/a/99660.html

相关文章:

  • 【leetcode hot 100 45】跳跃游戏Ⅱ
  • 第三百八十九节 JavaFX教程 - JavaFX WebEngine
  • uniapp-小程序地图展示
  • C++的模板(十四):更多的自动内存管理
  • AI的未来在手机里!
  • Spring Data审计利器:@LastModifiedDate详解(依赖关系补充篇)!!!
  • springBoot与ElementUI配合上传文件
  • Vue2——常用指令总结、指令修饰符、v-model原理、computed计算属性、watch监听器、ref和$refs
  • Elasticsearch(ES)的经典面试题及其答案
  • 深度对比:DeepSeek vs OpenAI 核心技术指标
  • Matlab安装tdms插件
  • Numpy用法(三)
  • QT操作Excel
  • 【 <二> 丹方改良:Spring 时代的 JavaWeb】之 Spring Boot 中的缓存技术:使用 Redis 提升性能
  • NodeJs之http模块
  • 学成在线--day02
  • 深度学习篇---模型训练评估参数
  • Tabby二:使用笔记 - 保姆级教程
  • C#的CSV 在8859-1下中乱码和技巧
  • 猜猜我用的是哪个大模型?我的世界游戏界面简单的模拟效果
  • 网络华为HCIA+HCIP 策略路由,双点双向
  • OSPF练习
  • Let’s Encrypt 宣布推出短期证书与 IP 地址支持,推动 Web 安全迈向新高度
  • 无线通信技术(二):ITU、3GPP及传统波段对无线频谱的划分
  • AutoDev 2.0 正式发布:智能体 x 开源生态,AI 自动开发新标杆
  • 计算机组成原理笔记(六)——2.2机器数的定点表示和浮点表示
  • React Router精通:轻松创建动态单页应用
  • 动态IP:网络世界的“变色龙”如何改变你的在线体验?
  • 革新汽车安全通信技术,美格智能全系车载通信模组支持NG-eCall
  • Baklib知识中台驱动智能架构升级