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

能否将Create React App项目迁移至Next.js?

从Create React App迁移到Next.js:无需从零重建

完全不需要从零开始重建项目,以下是可落地的迁移步骤,大部分代码可以直接复用:

1. 初始化Next.js项目

在现有CRA项目目录下(或新目录)执行:

npx create-next-app@latest

根据需求选择配置:如果习惯CRA的单页路由逻辑,建议先选Pages Router过渡;若想尝试新特性,可选App Router。

2. 迁移核心代码

  • 组件迁移:将CRA项目中src/components下的所有组件复制到Next.js项目的components目录(Next.js支持自定义src目录,若需要可手动创建并配置)。
  • 页面路由迁移:
    • Pages Router:把CRA的src/App.js内容迁移到pages/index.js,其他页面(如/about)对应创建pages/about.js,遵循Next.js的文件系统路由规则。
    • App Router:将主页面内容迁移到app/page.js,子页面对应创建app/about/page.js。
  • 全局样式迁移:
    • Pages Router:在pages/_app.js中导入原CRA的全局样式文件(如import '../styles/globals.css')。
    • App Router:在app/layout.js中导入全局样式,注意App Router仅允许在根layout中导入一个全局样式文件。

3. 替换依赖与配置

  • 移除CRA专属依赖:
npm remove react-scripts eslint-config-react-app
  • 环境变量调整:将CRA中REACT_APP_前缀的环境变量,替换为Next.js的NEXT_PUBLIC_前缀(客户端需访问的变量);服务端使用的变量可直接去掉前缀。
  • 路由跳转替换:把react-router-dom的Link组件替换为Next.js的next/link:
    • 原CRA代码:
      import { Link } from 'react-router-dom';
      <Link to="/about">关于我们</Link>
      
    • Next.js Pages Router:
      import Link from 'next/link';
      <Link href="/about"><a>关于我们</a></Link>
      
    • Next.js App Router:
      import Link from 'next/link';
      <Link href="/about">关于我们</Link>
      

4. 处理特殊场景

  • 静态资源:直接复制CRA的public目录到Next.js项目,引用方式保持不变(如/logo.png)。
  • API代理替换:CRA中package.json的proxy配置,可改用Next.js的API Routes(Pages Router的pages/api或App Router的app/api目录),将代理逻辑转为自定义API接口,或直接在客户端请求外部API(注意跨域处理)。
  • 客户端专属代码:若代码中使用了window、document等浏览器API,需用useEffect包裹,或通过typeof window !== 'undefined'判断,避免服务端渲染报错。

5. 测试与验证

  • 启动开发服务器:npm run dev,检查页面渲染、路由跳转是否正常。
  • 生产构建测试:执行npm run build和npm start,验证生产环境下的功能完整性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 06:50:30