使用 Vue 3 + 腾讯云 EdgeOne Pages 打造《明日方舟:终末地》风格计时器
前言:
最近《明日方舟:终末地》的消息越来越多,作为一名“塔塔开”的博士/管理员,我决定动手写一个风格化的计时器网页。除了复刻游戏那标志性的工业机能风 UI 外,我还想借此机会体验一下 腾讯云 EdgeOne Pages (EO Pages) 的静态网站托管服务,特别是它与 CNB (Cloud Native Build) 结合实现的自动化部署流程。
在这篇文章中,我将分享如何使用 Vue 3 构建这个项目,并重点介绍如何通过配置 .cnb.yml 实现从代码提交到全球边缘节点的自动发布。
🛠 技术栈概览:
* 前端框架: Vue 3 (Composition API)
* 构建工具: Vite
* UI 风格: 纯手写 CSS,使用 Flexbox/Grid 布局,配合 Rajdhani 和 Share Tech Mono 字体还原游戏视觉。
* 部署平台: 腾讯云 EdgeOne Pages
🚀 为什么选择 EdgeOne Pages?
传统的静态网站托管通常面临国内访问速度慢、配置繁琐或 SSL 证书管理麻烦等问题。腾讯云 EdgeOne Pages 的优势在于:
全球加速: 依托腾讯云的边缘节点,无论用户在国内还是海外,访问速度都极快。
开箱即用: 支持主流框架(Vue, React, Next.js 等)的一键部署。
免费 SSL: 自动配置 HTTPS 证书。
自动化部署: 提供了完善的 CLI 工具和流水线集成方案。
⚡️ 核心实现:自动化部署配置
为了实现“推送到 main 分支即上线”,我使用了 CNB 插件配合 EdgeOne CLI。这是整个项目的 DevOps 核心。
1. 项目结构与依赖
首先,我们需要在项目中安装 edgeone CLI 工具:
npm install -D edgeone2. 编写构建流水线 (.cnb.yml)
在项目根目录下创建 .cnb.yml 文件。这是 CNB 的配置文件,类似于 GitHub Actions 的 workflow。
我们需要完成以下步骤:
配置触发器(Push to main)。
安装依赖 (
npm install)。构建项目 (
npm run build)。关键步骤: 将
package.json复制到构建产物目录。执行部署命令。
以下是完整的配置代码:
# 触发器:推送到 main 分支时触发
main:
push:
stages:
# 第一步:构建项目
- name: Build Current Project
image: node:20
script:
- node -v
- npm install
- npm run build
# 注意:根据 EdgeOne 文档,手动构建部署时,
# 需要将 package.json 放入输出目录 (dist) 以便 CLI 识别项目配置
- cp package.json ./dist/
# 第二步:部署到 EdgeOne Pages
- name: Deploy to EdgeOne Pages
image: node:20
script:
# 使用 npx 运行 edgeone CLI 进行部署
# -n zmd: 指定项目名称
# ./dist: 指定构建输出目录
# -t $EDGEONE_API_TOKEN: 使用环境变量中的 Token 进行鉴权
- npx edgeone pages deploy ./dist -n zmd -t $EDGEONE_API_TOKEN3. 遇到的坑与解决方案
问题:部署时找不到配置文件 在使用 CLI 手动部署模式时,我发现如果不把 package.json 放到 dist 目录里,edgeone deploy 有时会报错或无法正确识别项目类型。 解决:在构建脚本中显式添加 cp package.json ./dist/ 命令。
问题:Token 安全 不要像我测试时那样把 Token 硬编码在 script 里!务必在 CNB 项目设置的“环境变量”或“密钥存储”中配置 EDGEONE_API_TOKEN,然后在 YAML 中通过 $EDGEONE_API_TOKEN 引用。
🎨 前端细节:还原终末地风格
为了达到“味儿正”的效果,我在 src/components/EndfieldCountdown.vue 中做了很多微调:
字体: 使用了
@fontsource/rajdhani和@fontsource/share-tech-mono,并通过本地打包加载,避免了 Google Fonts 在国内加载不稳定的问题。呼吸灯效: 使用 CSS
@keyframes实现了分隔符的闪烁效果,模拟系统运行时的动态感。响应式: 针对移动端重新定义了
rem基准和字体大小,确保在手机上也能完美展示。
/* 充满工业感的字体配置 */
.endfield-container {
font-family: 'Rajdhani', 'Noto Sans SC', sans-serif;
background-color: #000;
color: #fff;
}
/* 动态呼吸效果 */
@keyframes blink {
0%, 100% { opacity: 1; }
50% { opacity: 0.3; }
}🎉 最终效果
现在,每当我执行 git push,CNB 就会自动唤醒构建容器,打包我的 Vue 代码,并通过 EdgeOne 的高速通道推送到边缘节点。整个过程通常只需要几十秒。
访问体验非常丝滑,不再有 Loading 转圈的焦虑。如果你也在寻找一个既能满足国内访问速度,又支持现代 CI/CD 流程的静态托管方案,腾讯云 EdgeOne Pages 绝对值得一试。
项目已经部署在EdgePage EO中点击访问终末地计时界面
🤝 致谢
特别感谢以下项目和资源:
Arknights: Endfield: 游戏的 UI 设计是本项目的核心灵感来源。
腾讯云 EdgeOne: 提供了稳定、快速的全球部署服务。
@fontsource: 提供了方便的本地字体包,解决了中文字体加载问题。
该项目源码在CNB中 仓库连接:https://cnb.cool/JeffreyMing/endfield