跳到主要内容

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 -vpnpm -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_BASEVITE_API_BUYERVITE_API_SELLERVITE_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 rootalias 是否指向正确应用的产物。
  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,并通过 backNamebackNames 继承入口页面权限。缺少返回关系的隐藏页不会被自动放行。

同时确认页面已在 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/apipackages/configpackages/corepackages/componentspackages/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 前端