ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Windows下Ant Design Pro搭建实战:环境配置与避坑指南

Windows下Ant Design Pro搭建实战:环境配置与避坑指南

如果你正在 Windows 上折腾 Ant Design Pro(标题里写的 And Design Pro,指的就是这个基于 React 的企业级中后台前端项目),我猜你已经体会过什么叫“配环境两小时,启动五分钟”。我最初拿到这个项目的时候,从拉代码到浏览器出现欢迎页,硬生生花了一整个下午:Node 版本不对、依赖装到一半报错、端口被占用、英文报错看不懂、改了配置重启又起不来……每一道坎都让人怀疑人生。

这篇文章就是把我踩过的坑全部摊开:从 Windows 环境准备、Node.js 版本选择、脚手架初始化、依赖安装、配置文件拆解,到项目启动、接口转发、构建部署,全部按顺序写清楚。适合想用 Ant Design Pro 做管理后台的新手,也适合在 Windows 上接手这类项目的同学。后面还有一份“坑位速查表”,遇到问题可以直接对照排查。

1. 项目是干什么的:先搞清楚你装的到底是什么

1.1 它到底是什么,适合谁用

Ant Design Pro 不是一个单纯的组件库,而是一整套中后台前端解决方案。它把 React、umi、dva、antd 这些技术栈整合到一起,帮你把最常见的布局、登录、权限、路由、国际化、Mock 数据、构建配置都提前做好。你可以把它理解成“精装修交付的样板房”:直接在现成的壳子里填自己的业务代码,而不是从毛坯房开始砌墙。

这套东西适合什么场景?一句话:要快速做管理后台、数据看板、运营平台、内部系统这类偏“表格+表单+菜单”的业务系统。如果你想从零学习 React,我不建议直接拿它当教材,因为里面封装的层次比较多,新手容易懵。但如果你是被分配去改造一个现成的中后台项目,或者公司准备统一技术栈,那它确实能省掉大量重复工作。

1.2 Windows 下跑前端项目的核心链路

在 Windows 上跑 Ant Design Pro,本质上要打通一条链路:

源代码 -> Node.js 运行时 -> 包管理器(npm/yarn/pnpm)-> 依赖安装 -> 构建工具 -> 本地开发服务器 -> 浏览器

这中间任何一环出了问题,项目就起不来。前端项目不等于“打开浏览器就能跑”,它需要先把一堆依赖包装进node_modules,再由构建工具把源码编译、打包成浏览器认识的文件。Windows 和 Linux/macOS 最大的差异在于:路径分隔符、环境变量写法、文件权限策略、脚本执行方式都不一样,很多为 Unix 设计的工具链在 Windows 上会表现出各种“水土不服”。

1.3 为什么 Windows 上坑特别多

我见过很多同事在 Mac 上一次跑通的项目,拉到 Windows 上就起不来,不是代码问题,而是环境差异。最常见的有这几个:

第一,部分依赖包需要本地编译。比如旧版本里常见的node-sass,它要下载对应的二进制文件,Windows 下如果没有安装 VS Build Tools,或者网络镜像不对,很容易失败。现在的新版本大多换成sass,这类的坑少了,但老项目里还是很常见。

第二,PowerShell 执行策略限制。npm start本身没问题,但项目里如果包含一些.ps1脚本,或者全局安装的命令需要执行脚本,就有可能出现“无法加载文件”的提示。

第三,长路径问题。Windows 的老版本对路径长度有限制,而node_modules这种层级嵌套极深的目录很容易触发“路径太长”报错。

第四,换行符差异。Windows 默认用 CRLF,Unix 工具链默认用 LF,Git 在检出代码时可能把换行符改掉,导致 ESLint 报一堆无关错误。

了解这些,你就知道后面每一步为什么这么做了。

2. 环境准备:装好这些再动手

2.1 先选对 Node.js 版本,等于避开一半报错

Ant Design Pro 是 Node 生态的项目,Node.js 版本太老或太新都可能出问题。我的建议是:不要追求最新版,选择当前处于 LTS(长期支持)的版本,并用版本管理工具来安装。

Windows 上推荐用nvm-windows来管理多个 Node 版本。为什么不能只装一个?因为不同项目的依赖对 Node 版本要求不一样,有的项目在 Node 18 下正常,换个 Node 20 就编译崩溃。你用一个工具做版本切换,遇到问题可以快速换回项目要求的版本,而不是重装系统环境。

安装 nvm-windows 之后,用管理员身份打开终端,执行:

nvm install 18.20.4 nvm use 18.20.4 node -v

看到版本号输出就算装好了。这里有两个注意点:

  • 安装路径不要包含中文、空格,尽量保持默认路径。
  • 如果之前单独装过 Node.js,建议先卸载干净,否则版本切换会混乱。

2.2 包管理器:npm、yarn、pnpm 怎么选

Ant Design Pro 官方文档里曾经推荐过 yarn,但近年来的版本对 npm 和 pnpm 支持都不错。我的经验是:整个项目统一用一种包管理器,不要混用。

团队项目最容易犯的错就是:A 同事用 npm 装了依赖,B 同事用 yarn 跑了一遍,结果node_modules里的依赖树不一致,最终出现“我本地是好的,你那边起不来”的情况。解决办法很简单:项目根目录里如果存在yarn.lock,就统一用 yarn;如果只有package-lock.json,就用 npm。新项目我用 pnpm 比较多,安装快、磁盘占用小,但要注意如果项目里有某些依赖对 pnpm 的 hoist 策略有兼容问题,可能需要额外配置。

另外,npm 默认源在部分网络环境下安装速度很慢,建议先配置镜像源:

npm config set registry https://registry.npmmirror.com

设置后可以用npm config get registry确认。这能明显减少依赖下载超时的问题,尤其是node-sass、sharp这类带二进制文件的依赖。

2.3 编辑器与终端:VSCode + Git Bash 的组合

Windows 自带 CMD 和 PowerShell,但我建议装 Git for Windows,因为它会附带一个 Git Bash,里面支持rm -rf、ls这类 Unix 命令,比 CMD 好用很多。很多前端教程里的命令都是 Unix 风格,用 Git Bash 执行基本不会遇到语法问题。

编辑器选 VSCode,装上 ESLint、Prettier、EditorConfig 这几个插件。Ant Design Pro 自带完整的代码规范,插件装好后,保存代码能自动格式化,提交代码时少吃亏。

安装 Git for Windows 的时候,有一个关键选项:换行符转换方式。我建议选择 “Checkout as-is, commit as-is”,意思是检出和提交都保持原样,不做自动转换。如果不这样,Git 会把 CRLF 改成 LF 或反过来,ESLint 会因此报大量“Delete CR”的错,非常烦人。

2.4 开发者模式、长路径与执行策略

Windows 上有三个系统级设置,建议提前处理:

第一,开启开发者模式。路径在“设置 -> 隐私和安全性 -> 开发者选项”。这个模式允许创建符号链接,部分前端工具链需要这个能力。

第二,启用长路径支持。老版本的 Windows 默认限制路径长度不超过 260 个字符,而node_modules的目录嵌套经常超长。Win10 1607 之后的版本可以在“本地组策略编辑器”里找到“启用 Win32 长路径”,或者在注册表里修改。最简单的方法是用管理员身份执行:

reg add "HKLM\SYSTEM\CurrentControlSet\Control\FileSystem" /v LongPathsEnabled /t REG_DWORD /d 1 /f

改完需要重启电脑。

第三,放宽 PowerShell 执行策略。如果某个脚本提示无法加载,可以在管理员 PowerShell 里执行:

Set-ExecutionPolicy -Scope CurrentUser RemoteSigned

然后输入Y确认。这个操作不影响系统安全,只是允许本地脚本运行。

3. 初始化项目:从空目录到跑起来的真相

3.1 使用官方脚手架创建项目

不建议直接复制一个别人的项目包来用,因为你不知道对方的依赖版本、Node 版本、配置项是否与你当前环境匹配。用官方脚手架创建,能让基础配置和依赖版本保持在一个相对一致的起点。

先全局安装脚手架工具:

npm i -g @ant-design/pro-cli

然后创建项目:

pro create my-app

交互式命令里通常会问你选择哪种模板,新手选择带完整布局和示例页面的完整版即可。如果你下载的版本交互项不同,记住一条原则:选那个包含登录、布局、权限示例的模板,别选精简空壳,否则你后面还是要自己补配置。

创建完成后,进入项目并安装依赖:

cd my-app npm install

如果这一步顺利,说明环境基础没问题。这一步失败的概率很高,下面单独讲。

3.2 依赖安装失败的 5 个常见原因

我在 Windows 上碰到的依赖安装失败,绝大多数是下面五种原因。

第一种:网络超时。表现是ETIMEDOUT、ESOCKETTIMEDOUT。解决方法是先配置镜像源,再清理缓存重装:

npm cache clean --force rm -rf node_modules npm install

第二种:编译型依赖报错。表现是安装到某个包时开始编译,然后报缺 Python、缺 C++ 工具链。旧项目里node-sass尤其典型。解决方法是先确认镜像源配置正确,再安装 Windows 构建工具:

npm i -g windows-build-tools

不过 windows-build-tools 在现代 Node 版本下不一定兼容,所以更稳妥的办法是检查项目是否真的依赖node-sass,如果是老项目,想办法把它替换成sass。

第三种:缓存损坏。现象是同一个依赖反复安装失败,或者报校验值不匹配。执行:

npm cache verify

还不行就清空缓存。

第四种:权限不足。安装过程中出现EACCES或EPERM,通常与目录权限有关系。先确认你的项目路径没有被某些安全软件锁定,再用管理员身份打开终端安装一次。注意尽量不要用sudo chmod去强行改目录权限,容易把目录权限搞乱,我一般会换个纯英文路径重新克隆项目。

第五种:lock 文件与包管理器不一致。项目里既有package-lock.json又有yarn.lock,然后你换着用 npm 和 yarn 安装,就会出现各种版本冲突。解决办法是保留一种 lock 文件,删掉另一个,删除node_modules后重新安装。

3.3 安装完成后目录结构怎么看

依赖装完后不要急着npm start,先花十分钟了解目录结构。Ant Design Pro 的项目目录大致是:

my-app/ ├── config/ │ └── config.ts ├── src/ │ ├── components/ │ ├── pages/ │ ├── services/ │ ├── app.tsx │ └── global.tsx ├── mock/ ├── public/ ├── package.json └── tsconfig.json
  • config/:项目配置文件所在位置,路由、布局、主题、构建相关配置都在这。
  • src/pages/:页面文件,每个文件夹对应一个路由页面。
  • src/components/:公共组件。
  • src/services/:接口请求相关代码。
  • mock/:本地 Mock 数据,前后端分离开发时非常有用。
  • public/:静态资源目录,不会被构建处理。
  • package.json:依赖声明和脚本命令。

新手最容易犯的错是:一上来就改src/pages里的代码,结果发现页面没变化。原因是你可能改的是 mock 页面,或者路由还没有指向新页面。

3.4 关键配置文件逐个拆解

打开config/config.ts,你会看到一长串配置。我建议重点关注几个部分:

  • routes:路由配置。菜单和页面的对应关系基本都由这里决定。新增页面时,除了在src/pages下建文件,通常还要在这里加一条路由。
  • layout:是否启用 Ant Design Pro 自带的布局。新手阶段建议保持默认。
  • theme:主题色配置。想改品牌色,通常改这里。

再看package.json里的scripts,核心命令就是:

{ "scripts": { "start": "npm run dev", "build": "umi build", "lint": "eslint .", "test": "umi test" } }

启动项目用的是npm start,内部会触发 umi 的 dev 命令。如果提示umi找不到,多半是依赖没装完整,或者 Node 版本太新导致依赖兼容问题。

4. 配置与启用:把项目真正跑起来

4.1 启动开发服务器

一切就绪后,在项目根目录执行:

npm start

正常情况下,终端会打印类似App running at: http://localhost:8000的提示。打开浏览器访问这个地址,能看到登录页或欢迎页。

如果启动过程中有报错,先不要慌,把错误信息完整复制出来再搜索。我们最容易犯的错是一看到英文报错就懵,其实报错信息通常会指出具体文件路径和原因,比如缺了某个依赖、某个配置文件语法不对、端口被占用。先看清楚再动手改。

启动之后,终端不要关。修改代码时,开发服务器会自动重新编译,浏览器会通过热更新刷新页面。

4.2 接口转发配置:本地联调时最关键的一步

页面跑起来之后,你很快会遇到一个问题:前端页面在localhost:8000,后端接口跑在localhost:8080,直接请求后端接口会跨域。Ant Design Pro 脚手架里预留了一个接口转发配置,它的作用是把前端发往特定路径的请求,自动转发到后端真实地址,从而绕开浏览器跨域限制。

在配置文件里你会看到一段负责接口转发的配置块。我这边不展开字段名,直接说思路和常见坑。你只需要在转发规则里加一条:所有以/api开头的请求,转发到后端地址。

配置大致长这样:

{ '/api': { target: 'http://localhost:8080', changeOrigin: true, } }

新手最容易犯的错是把target写成http://localhost:8000,也就是前端自己的地址,结果请求转了一圈又回到前端,接口全部 404。记住,target一定要写成后端服务的地址。

改完这个配置之后,必须重启npm start,因为配置文件修改了,开发服务器需要重新读取。

4.3 Mock 数据与真实接口切换

Ant Design Pro 自带 Mock 能力,项目里有一个mock/目录。默认情况下,前端请求会在本地找到 Mock 数据,所以你没有后端也能把页面跑起来、看到完整的交互效果。

等到真实后端接口就绪,你可能想关掉 Mock。命令行里启动时加一个环境变量:

set MOCK=none npm start

用 PowerShell 的话写成:

$env:MOCK="none" npm start

关掉 Mock 之后,所有请求都会走配置好的接口转发规则。注意:如果后端还没启动,页面上的请求会报错,这属于正常现象,不代表你的前端配置有问题。

4.4 浏览器检查与首屏验证

启动成功后,打开浏览器进入页面,按 F12 打开开发者工具,重点看两个地方:

  • Console 面板:有没有红色报错。
  • Network 面板:接口请求的返回状态是不是 200。

新手经常遇到“页面白屏但终端没有报错”的情况,这时候优先看 Console,如果有类似Unexpected token '<'的报错,说明你的请求命中了 HTML 页面而不是接口数据,大概率是接口转发目标地址不对。如果 Console 干净,那问题可能出在路由或权限配置上,需要逐层排查。

5. 从开发到构建:把你的成果变成可部署文件

5.1 构建命令与常用脚本

开发完成之后,要执行构建命令,生成可供部署的静态文件:

npm run build

构建产物默认输出到dist/目录。里面是压缩后的 JS、CSS、HTML,还有public/目录下的静态资源。打开dist/index.html并不能直接双击运行,前端项目构建后通常需要通过 HTTP 服务访问。

如果你在构建过程中看到内存溢出的报错,可以在启动命令前设置 Node 内存上限:

set NODE_OPTIONS=--max-old-space-size=4096 npm run build

PowerShell 写法是:

$env:NODE_OPTIONS="--max-old-space-size=4096" npm run build

5.2 构建产物本地预览

想在部署前先预览一下构建结果,可以用serve这个工具。

npx serve dist

启动后访问http://localhost:3000(端口以实际输出为准),就能看到和线上环境更接近的效果。这一步在微调路由模式、检查静态资源路径时很有用。

5.3 部署前的路径与路由模式调整

部署到服务器之后,最容易踩的坑是路由模式。

Ant Design Pro 默认可能使用浏览器历史路由模式,这种模式下,直接访问http://你的地址/某个子页面时,服务器会找不到对应的路径,因为服务器上并没有这个物理文件。解决办法有两种:

第一种,改回 hash 路由模式。URL 会变成http://你的地址/#/某个子页面,服务器不需要额外配置。缺点是 URL 里多一个#,部分场景不美观。

第二种,让服务器把所有请求都重写到index.html。这是单页应用的标准做法,如果你控制不了服务器配置,就用 hash 模式最省事。

另外,如果项目不是部署在域名根路径,而是部署在类似http://你的地址/admin/这样的子路径下,需要同步调整配置中的base或publicPath,否则 JS、CSS 资源会加载不到。改完之后重新构建。

6. 新手必看的坑位清单:我踩过的,你别再踩

报错或者现象常见原因排查/解决办法
端口被占用,8000 起不来上次启动的进程没有完全关闭找到占用进程并结束,或修改端口配置
node-sass安装失败镜像源不对 / 缺编译工具换镜像源后删除node_modules重装
PowerShell 报“无法加载文件”执行策略限制脚本设置RemoteSigned执行策略
启动后提示找不到某个模块node_modules损坏或不完整删除node_modules和 lock 文件重新安装
ESLint 突然报一堆“行尾”错误Git 换行符自动转换导致Git 设置为原样检出提交,查看.editorconfig
页面能打开,接口全部 404转发目标地址配置错误把转发目标改成后端真实地址后重启
构建时内存溢出Node 默认内存不足设置NODE_OPTIONS后重新构建
部署后页面空白,资源 404publicPath/base配置不对调整部署子路径配置后重新构建
中文或空格路径导致各种奇怪报错工具链对路径兼容性差换到纯英文目录重新安装依赖
安全软件报毒或拖慢启动node_modules被实时扫描把项目目录加入安全软件白名单

这张表里的大部分问题,我都不是因为技术多高深才解决,纯粹是踩过一次、记录下来、下次照方抓药。很多坑只要提前规避,根本不消耗时间。

7. 项目二次开发前,我建议你先做三件事

7.1 固定 Node 版本

项目目录下新建一个.nvmrc文件,写入你当前使用的 Node 版本号,比如18.20.4。这样团队其他人用 nvm 执行nvm use时,会自动切到对应版本。同时在package.json里加上engines字段:

{ "engines": { "node": ">=18 <19" } }

这能避免“明明代码一样的,为什么你那边起不来”的版本类问题。

7.2 先跑通一个最简单的页面

不要一上来就大改布局、加权限,先修改一个页面的标题或按钮文案,保存后确认页面能热更新。然后在路由配置里新增一条测试路由,新建一个简单页面,确认菜单点击后能跳转。这一步看起来简单,但能帮助你快速理解“页面文件、路由、菜单”三者之间的关系,这是后面所有开发的基础。

7.3 把代码规范和提交规范先对齐

Ant Design Pro 自带 ESLint 配置和代码规范,但每个人的编辑器默认格式不同,很容易把别人的代码格式改乱。建议先统一 VSCode 配置,让 ESLint 在保存时自动检查。项目里如果有husky、lint-staged之类的提交检查工具,先跑一遍npm run lint,把所有报错集中处理掉,再开始写业务代码。

最后说句实在话:Ant Design Pro 在 Windows 上的搭建一点也不玄学,绝大多数问题都是环境不一致、版本不匹配、目录和权限这些“小事”。按顺序把环境准备好,遇到报错别急着重装,先读报错信息,再按照坑位清单排查,基本十分钟内能解决。至少到现在,我再帮别人搭这个项目,已经没有一次需要折腾超过半天了。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进