仿抖音短视频 App:用 Vue3 在手机上刷出原生级体验,三步跑起来
【免费下载链接】douyinVue3 + Pinia 仿抖音,Vue 在移动端的最佳实践 . Imitate TikTok ,Vue Best practices on Mobile项目地址: https://gitcode.com/GitHub_Trending/do/douyin
想真正弄懂短视频 App 的"骨架"长什么样,最直接的办法不是看文档,而是把一个能跑起来的仿抖音项目跑起来、刷一刷。douyin-vue 就是这样一个用 Vue3 + Pinia + Vite 搭的移动端短视频 Demo:首页能上下滑刷视频、评论区能互动、还有商城和私信,但它不依赖任何真实后端——所有数据都拦截在本项目里。换句话说,你能在断网的机器上,完整体验一个"像抖音"的信息流。
想看懂短视频信息流,却没有后端可用
做移动端的人常遇到一个卡点:想研究"信息流怎么滑、视频怎么无缝衔接、评论怎么弹出来",但真后端的接口、鉴权、视频 CDN 都拿不到,自己从零搭一套又太重。
douyin-vue 的解法是把整条数据链路"本地化"。它用axios-mock-adapter拦截掉所有 axios 请求,返回仓库里现成的 JSON,让前端以为自己在跟真实后端对话。这样你就只关心"前端怎么把一条信息流做丝滑",而不必为环境、鉴权、服务器操心。代码里的这一层拦截逻辑集中在 mock 入口,请求实例在 utils/request。
三步跑起来:clone、安装、进手机模式
这个项目必须用 git clone 拉下来才能运行,下载 zip 包是起不来的(因为构建时依赖 git 的提交信息)。命令如下:
git clone https://gitcode.com/GitHub_Trending/do/douyin cd douyin npm install npm run dev跑起来后访问http://127.0.0.1:3000。⚠️ 有两个坑一定要避开:
- 它是移动端布局,电脑上看必须切手机模式:先按
F12打开控制台,再按Ctrl+Shift+M,否则页面是一坨横着的,根本没法看。 - 手机上建议用 Via 或 Chrome 打开,别的浏览器可能把视频强制全屏,挡住整个信息流。
不想本地跑的话,仓库也给了 Dockerfile,可以直接拉镜像起容器;端口、热更新、CDN 引入这些都在 vite.config.ts 里配好了,改一下端口就能自己起服务。
数据是怎么"装"成后端的
真正让这个项目"能断网跑"的,是那一层 mock。src/mock/index.ts里创建了一个MockAdapter包在 axios 实例外面,按路由把请求映射到本地的posts6.json、用户数据等文件上;接口定义分在 api/videos.ts 和 api/user.ts。
这套做法的收益很实在:你改一行前端逻辑,刷新就能看到效果,不用等接口联调;也方便你把"视频列表"换成自己的数据格式,照着 posts6.json 的结构填就行。README 里也说明了内容来源——视频取自公开的抖音创作者、图片来自小红书公开笔记,均标注为互联网公开信息。
打开 App 能看到什么:从首页一路滑到"我"
别被"仿抖音"三个字唬住,它覆盖的面比想象中宽。页面按业务拆在 src/pages/ 下,你几乎能找到真 App 的主线:
首页信息流(pages/home/)是核心:上下滑的视频流、关注/推荐切换、长视频频道、搜索、发布页、直播间页,还有音乐榜(MusicRankList.vue)。作者把"200 行实现类似 Swiper 的轮播""视频无限滑动""路由转场动画"这些难点做成了系列文章,项目里对应的就是 components/slide/ 和 Scroll.vue。
消息与社交(pages/message/):单聊、群聊、粉丝、红包、各种系统通知都有独立页面。"我"(pages/me/):资料编辑、收藏、历史记录、青少年模式。其它还有商城(pages/shop/)、找熟人(pages/people/)、视频详情(pages/other/)。
通用能力则沉淀在 src/components/:评论(Comment.vue)、分享(Share.vue)、视频通话(Call.vue)、瀑布流(WaterfallList.vue)等,被多处页面复用。状态统一走 Pinia store,跨页面通信靠一个事件总线 utils/bus.ts。
二次开发从哪里切入
如果你是来学习或改一个自己的版本,建议按这个顺序读:
- 先跑通、再改数据。读懂 mock/index.ts 怎么把请求映射到本地 JSON,然后把
posts6.json换成自己的视频源,信息流立刻变成你的内容。 - 看滑动是怎么实现的。信息流的顺滑感全在 components/slide/ 和 Scroll.vue,配合 README 里那套 rem / 动态 vh 的自适应方案。
- 拆页面边界。每个业务是一个独立目录,互不纠缠,照 pages/home/ 的结构就能加一个新频道。
- 看构建怎么分块。vite.config.ts 里用
manualChunks把各页面拆成独立 chunk、把公共组件提出来,是移动端控制首屏体积的不错参考。
边界:GPL、仅限学习、数据来源
三件事提前说清楚,免得你拿错场景。其一,仓库用GPL协议(见 LICENSE),商用前务必确认;README 也明确"本项目仅适用于学习和研究,不得用于商业使用"。其二,它是个持续开发中的 Demo,作者还在 docs/NOTE.md 里列着 TODO(双指缩放、真机输入、100vh 适配等),别把它当成品。其三,文档是多语言的,中文主文档就是 README.md,另有 English、Japanese、德、法、西等版本,找不到的细节可以先翻英文版。
下一步给你个具体动作:clone 下来切手机模式刷一遍首页,然后打开src/mock/index.ts对照着看请求是怎么被"吃掉"的——读懂这一层,你对"前端如何假装有一个后端"就有体感了。
【免费下载链接】douyinVue3 + Pinia 仿抖音,Vue 在移动端的最佳实践 . Imitate TikTok ,Vue Best practices on Mobile项目地址: https://gitcode.com/GitHub_Trending/do/douyin
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考