跳到主要内容

BBC 8.0 前端常见问题

为什么不能使用 npm 或 Yarn 安装?​

项目根 package.json 通过 packageManager 固定使用 pnpm@11.7.0,安装前置脚本也会拒绝其它包管理器。先在项目根目录执行:

corepack enable
corepack prepare pnpm@11.7.0 --activate
pnpm -v
pnpm install --frozen-lockfile

不要通过删除 pnpm-lock.yaml、改用 npm/Yarn 或跳过前置检查来掩盖依赖问题。这些操作会破坏多应用 workspace 的可复现安装。

为什么旧文档中的 Node.js 14 不能继续使用?​

8.0 已升级到 TypeScript、ESLint、Vite 和 pnpm 的新版本,Node.js 14 不再是合适的开发基线。本指南推荐 Node.js 22,并要求本机与 CI 使用一致版本。

如果安装或构建仍报 Node engine 错误,先记录 node -v、pnpm -v 和完整错误,再按团队确认的支持版本调整;不要只针对单个依赖强行降级。

仓库里没有单独的本机环境模板,配置从哪里创建?​

当前 8.0 源码仓库跟踪 .env.development、.env.test 和 .env.production。本机开发覆盖文件应从开发环境文件创建:

cp .env.development .env.development.local

.env.development.local 已被 Git 忽略。修改后重启对应 Vite 服务。不要把个人联调地址直接提交到公共环境文件。

启动后请求到了错误的 API 地址​

开发模式的有效配置按以下顺序解析:

  1. CI、Jenkins 或当前进程注入的环境变量。
  2. .env.development.local 中的本机覆盖值。
  3. .env.development 中的团队开发环境值。
  4. config/api.ts 中的代码兜底值。

Vite 构建配置会让当前进程的 process.env 覆盖 loadEnv() 读取的文件值,因此排查 CI 构建时应先确认流水线实际注入了哪些变量,但不要在日志中回显敏感配置。

如果设置了 VITE_API_GATEWAY,未单独覆盖的 Base、Buyer、Seller、Admin API 都会使用该网关;否则分别检查 VITE_API_BASE、VITE_API_BUYER、VITE_API_SELLER 和 VITE_API_ADMIN。

修改后必须重启 Vite。仍有问题时,在浏览器 Network 面板确认最终请求地址,并检查是否由代理、浏览器缓存或错误的构建产物导致。

API 可以访问,但浏览器仍提示 CORS 或 Mixed Content​

这是浏览器与部署边界问题,不应通过页面代码吞掉错误:

  • CORS:后端或网关必须允许实际前端 Origin、请求方法和 Authorization 等请求头。
  • Mixed Content:HTTPS 页面不能请求 HTTP API、图片、WebSocket 或上传地址。
  • 上传失败:同时检查网关请求体大小、超时和对象存储跨域策略。

修复后应重新验证登录、刷新 token、上传和实时消息,而不只是验证一个公开 GET 接口。

修改环境变量后为什么页面没有变化?​

Vite 在开发服务启动或构建时读取 .env.*。修改后需要:

  • 开发环境:停止并重新启动 pnpm dev:<端>。
  • 测试环境:重新执行 pnpm build:test 或目标端命令。
  • 生产环境:重新执行 pnpm build 并重新发布对应 dist。

只修改服务器上的 .env.production,不会改变已经构建好的静态文件。

三个开发端口分别是什么?​

应用默认端口
买家 PC 端3000
商家管理端3002
平台管理端3003

3001 是跨端链接配置中的默认移动端地址,不会由当前 workspace 启动。8.0 没有独立的 3004 装修应用,装修编辑器由平台端或商家端按需加载。

页面刷新或直接打开二级 URL 为什么返回 404?​

三个应用使用 Vue Router history 模式。正式部署时 Web 服务器必须将不存在的前端路由回退到对应应用的 index.html。

独立域名部署通常需要:

location / {
try_files $uri $uri/ /index.html;
}

子路径部署还必须保证 VITE_BASE_*、Vue Router base、Nginx location 和静态目录完全一致。不要只测试首页;还要复制二级 URL 到新标签页并直接打开。

构建后静态资源 404​

按顺序检查:

  1. 当前端的 VITE_BASE_* 是否与部署路径一致。
  2. VITE_ASSETS_* 是否指向本次构建对应的 CDN 前缀。
  3. CDN 是否完整上传了本次 dist 的资源。
  4. Nginx root 或 alias 是否指向正确应用的产物。
  5. HTML 和资源是否混用了不同版本的发布包。

资源问题修复后清理浏览器/CDN 缓存并重新检查所有 JS、CSS、字体和图片请求,不能仅凭首页可见就判断部署成功。

平台端或商家端新增菜单后为什么不显示?​

后台菜单不是由前端静态路由树单独决定的。一个可点击菜单页面至少需要:

  1. 在对应端 router/page-routes.ts 注册页面。
  2. 在 router/route-components.ts 绑定 Vue 组件。
  3. 后端 current 菜单接口返回与 route name 相同的 identifier。
  4. 当前角色拥有该菜单权限。
  5. 对应功能开关没有过滤该页面。

菜单父子层级、同级顺序、可见标题和非空图标以后端接口为准。纯父分组只需在后端维护,不要在前端创建功能不明的占位页面。

菜单能看到,但点击后空白或跳转失败​

常见原因是 page-routes.ts 中的 name 没有在 route-components.ts 中绑定,动态 import 路径错误,或者后端 identifier 与本地 name 大小写不一致。

检查浏览器控制台中的权限诊断和动态 import 错误。不要用一个空白兼容页静默接住未知 identifier,这会隐藏真实配置问题。

隐藏详情页为什么被权限守卫拦截?​

后台详情、编辑和审核页通常设置 hidden: true,并通过 backName 或 backNames 继承入口页面权限。缺少返回关系的隐藏页不会被自动放行。

同时确认页面已在 route-components.ts 绑定。需要保留入口筛选和分页时,使用 withReturnTo() 构建目标地址,并由 usePageBack() 统一返回。

关闭 IM、直播或分销后仍出现入口​

先检查对应环境文件中的功能开关:

VITE_IM=false
VITE_LIVEVIDEO=false
VITE_DISTRIBUTION=false

开关在启动或构建时读取,修改后必须重启或重建。后台权限路由会过滤相应候选页面;页面内部的自定义按钮也必须使用统一功能开关判断,不能只隐藏菜单。

多语言 key 缺失​

语言资源位于 packages/locales。修改后执行:

pnpm locale:check

后台可见菜单标题优先由后端菜单接口提供,页面自身标题和旧路由兼容映射仍可能需要语言 key。新增文案时同时检查所有受支持语言,不要只补当前页面看到的一种语言。

pnpm typecheck 报共享包错误,能只在页面绕过吗?​

不能。packages/api、packages/config、packages/core、packages/components 和 packages/utils 会影响多个应用。共享类型错误应在事实源修复,而不是在单个页面增加 any、忽略指令或重复类型。

可以先缩小 API 类型问题:

pnpm typecheck:api:strict

最终仍应执行完整 pnpm typecheck 和受影响的 pnpm build:dev。

packages/api/models 可以添加接口函数吗?​

不可以。该目录保存从后端 Java VO/DTO/DO 生成的 TypeScript 类型,根入口使用 type-only 导出。把运行时函数写入生成文件会导致生成覆盖业务逻辑,也无法从包根获得运行时导出。

  • 单端业务接口:放在对应的 apps/*/src/api。
  • 跨端运行时接口:建立职责明确的共享模块,并显式从 packages/api 导出。
  • 仅复用请求/响应结构:使用 packages/api/models 中的生成类型。

当前 PC UI 仓库是否包含移动端?​

不包含。当前 workspace 只有:

apps/pc
apps/seller
apps/admin

packages/decor 中存在 mobile 装修预览能力,配置中也有 VITE_DOMAIN_MOBILE,但它们用于跨端数据和链接协作,不等于移动端应用已经包含在本仓库。移动端的源码、构建和发布必须按独立工程验证。

构建通过是否代表功能已经验收?​

不代表。构建只能证明源码可以生成静态产物。发布或交付前还应至少验证:

  • 登录、退出和刷新 token。
  • 平台端、商家端在不同角色下的动态菜单。
  • 直接打开和刷新二级路由。
  • API、上传、CDN 和实时消息地址。
  • 功能开关和多语言。
  • 浏览器控制台没有未处理错误或资源 404。

更多构建命令见运行发布,正式部署检查见部署 PC 前端。