技术栈

前端:vue2 + vuex + webpack + ES6/7 + stylus + nginx

后端:koa2

项目运行

如何运行

运行前请先安装nodejs

clone项目到本地

git clone https://github.com/lybenson/bilibili-vue.git

前端运行

cd bilibili-vue

npm install

npm run dev

后端运行

cd bilibili-vue/bilibili-api

npm install

npm run dev

为了确保运行正确,请先运行后端服务。再运行前端,之后访问 http://localhost:8080

组件

根据首页的各模块的功能不同,划分出了共20多个可复用的组件。具体请看下方

├── banner //轮播组件

│   ├── Banner.vue

│   └── BannerItem.vue

├── common // 公共组件

│   ├── BHeader.vue

│   ├── BMenu.vue

│   ├── BMenuItem.vue

│   ├── PostMaterial.vue

│   ├── Search.vue

│   └── TopContainer.vue

├── content // 主内容组件

│   └── BContent.vue

├── contentRow // 单个分类的组件

│   ├── BContentRow.vue

│   ├── BRowBody.vue

│   ├── BRowHead.vue

│   ├── BRowItem.vue

│   ├── BRowRank.vue

│   └── BRowRankBody.vue

├── contentTop // 页面顶部组件

│   ├── BContentTop.vue

│   └── BContentTopItem.vue

├── live //直播所在的组件

│   ├── BLive.vue

│   ├── BLiveItem.vue

│   ├── BLiveRank.vue

│   └── BLiveRankItem.vue

├── nav //右侧导航条组件

│   ├── BNavSide.vue

│   └── smooth-scroll.js

└── promote // 推广组件

├── BPromote.vue

└── BPromoteItem.vue

组件的原则就是尽量将复杂的UI布局划分成单个小的UI组件,逻辑处理也被划分成更多的单个小的逻辑。数据流动采用的单向数据流动。子组件的数据更多的是来自于父组件,父组件的数据主要是其本身发起的ajax请求。本项目中ajax请求库使用的是axios。

状态管理

目前的状态管理采用vuex。由于vuex可以分多个子module。所以在不同模块下单独维护一份状态,同时对于一些公共的状态,比如发起网络请求的requesting,错误时的状态error则保存在根状态中,之后可以通过子模块中的rootState.requesting获取来赋值。

在子模块中发送网络请求获取数据是一个异步的过程,所以将网络请求放在actions。每次发起网络需要经历下面的步骤

请求中

rootState.requesting = true //请求状态更新为true,表示请求中

commit(TYPE.XX_REQUEST) // 发送同步操作,请求中的数据处理

请求成功

rootState.requesting = false //请求状态更新为false,表示请求结束

commit(TYPE.XX_SUCCESS, response) //发送同步操作,处理请求成功后数据

请求失败

rootState.requesting = false //请求状态更新为false,表示请求结束

rootState.error = error

commit(TYPE.XX_FAILURE, error) //发送同步操作,处理请求失败

动画

B站首页充斥着大量的动画效果。目前动画使用的主要有三种方式:

以hover效果触发。

通过js触发的效果,如点击轮播图的原点时,主要通过设置css属性transition: .2s;,再通过js 设置css属性this.$refs.banner.style.marginLeft = left。

通过vue提供的动画方式。

样式

样式文件使用的是stylus,暂未使用任何vue现成的UI组件。需要安装stylus-loader, stylus,由于vue-cli中的webpack已经配置好了stylus了,所以只需要安装就可以了。

npm install stylus-loader --save-dev

npm install stylus --save-dev

性能优化

图片懒加载

压缩js、css

服务器开启gzip

浏览器缓存

...

发布

完成项目后将发布到自己的服务器上,首先确保服务器已安装nodejs,具体安装步骤不再赘述。

后端发布

后端采用pm2做项目管理

安装pm2

npm install pm2 -g

启动项目

cd bilibili-api && npm install

pm2 start index.js

前端发布

webpack打包

npm run build

需要注意的是,直接运行此命令可能会导致资源无法找到的问题。所以需要对webpack配置做一定的修改。

在webpack.base.conf.js文件中修改publicPath如下

output: {

path: config.build.assetsRoot,

publicPath: './', //资源的公共路径

// publicPath: process.env.NODE_ENV === 'production' ? config.build.assetsPublicPath : config.dev.assetsPublicPath,

filename: '[name].js'

}

这样打包后还会出现stylus中background-image资源无法找到的问题,我采用的方式修改ExtractTextPlugin配置,在webpack.prod.conf.js中修改

new ExtractTextPlugin('[name].[contenthash].css')

将分离的css打包路径分离到static文件夹之外。

打包完成后上传到服务器/var/www/html/bilibili目录下。

配置nginx服务器。

location /bilibili {

root /var/www/html;

index index.html;

}

总结

目前主要功能都已经完成的差不多。主要还差一个预览视频与弹幕的功能尚未完成,希望能把B站首页写完,并且会持续更新中,后面可能会加上直播等功能。

相关截图:

首页:

轮播:

直播:

排行:

游戏:

拖拽排序与滚动效果:

B站后端java_GitHub - javalovelinux/bilibili-vue: 前端vue+后端koa,全栈式开发bilibili首页...相关推荐

  1. 前端vue+后端koa,全栈式开发bilibili首页(附源码)

    技术栈 前端:vue3 + vuex + vite + stylus + nginx 后端:koa2 源码下载: 源码下载链接:https://wwb.lanzouy.com/iwSVW0bpr4be ...

  2. 基于NodeJS的全栈式开发(基于NodeJS的前后端分离)【转】

    随着不同终端(Pad/Mobile/PC)的兴起,对开发人员的要求越来越高,纯浏览器端的响应式已经不能满足用户体验的高要求,我们往往需要针对不同的终端开发定制的版本.为了提升开发效率,前后端分离的需求 ...

  3. 尚硅谷Java、HTML5前端、全栈式开发视频

    Java基础阶段: 一.20天横扫Java基础(课堂实录) https://pan.baidu.com/s/1htTzZRQ 二.尚硅谷Java基础实战--Bank项目 http://pan.baid ...

  4. html静态和后端,前台和后台,前端和后端

    概述 学习AJAX的过程中,发现自己之前存在着很多的不足,于是花了些时间,总结了一些知识,现在和大家分享一下. 前端和后端,前台和后台 前端和后端指的是客户端和服务器端:前台和后台指的都是客户端上浏览 ...

  5. 计算机程序前端和后端指什么,什么是前端和后端

    什么是前端和后端?前端和后端哪个好?相信很多小白都会有这样的的问题,下面我们就来讲解一下前端和后端的区别是什么? 什么是前端和后端? 网站前端是对网页静态页面的设计,通俗的来说,就是我们肉眼能看的到的 ...

  6. 谁说前端工程师不能成为全栈?

    今年受经济下行与疫情叠加的影响,毕业生有800多万,就业形势十分严峻,但即便如此,Web 前端人才在软件开发行业的就业市场中依旧供小于求,目前,全国总缺口每年大约为近百万人. 行业对前端需求量持续增加 ...

  7. 从零到部署:用 Vue 和 Express 实现迷你全栈电商应用(四)

    随着前端应用的日渐复杂,状态和数据管理成为了构建大型应用的关键.受 Redux 等项目的启发,Vue.js 团队也量身定做了状态管理库 Vuex.在这篇教程中,我们将带你熟悉 Store.Mutati ...

  8. 从零到部署:用 Vue 和 Express 实现迷你全栈电商应用(三)

    这篇文章中,我们将讲解 Vue 实例的 Props 和 Methods,接着我们又讲解了最常见的 Vue 模板语法,并通过实例的方式将这些模板语法都实践了一番,最后我们讲解了 Vue 组件的组合,并完 ...

  9. 从零到部署:用 Vue 和 Express 实现迷你全栈电商应用(最终篇)

    本文由图雀社区成员 mRc[1] 写作而成,欢迎加入图雀社区[2],一起创作精彩的免费技术教程,予力编程行业发展. 如果您觉得我们写得还不错,记得 点看 ,鼓励我们写出更好的教程???? 本篇我们将实 ...

最新文章

  1. linux查看接口名,在linux下 怎么查看网络接口的名字? 网络接口的名字英文是什么呀?...
  2. BTC 缓步推升,BCH 再拔头筹
  3. [LeetCode]#13 3sum
  4. VS和matlab混合编程的推荐书籍!
  5. Python os模块常用介绍
  6. haskell程序设计语言
  7. 每个特征图1各因子和一个偏置_nlp中的概率图模型
  8. 内核模块的加载与卸载
  9. paip.c++ gcc 不能捕获exception异常的解决
  10. 禾川plc编程软件_HCP Works下载 HCP Works(禾川PLC编程软件) v2.26.01.92012 官方安装版 下载-脚本之家...
  11. 【名牌电脑制作隐藏分区与释放隐藏分区的方法】
  12. C语言条件运算符详解
  13. 基础知识--封装、继承、多态、抽象
  14. 将网页保存为mht文件
  15. python数据爬取、分析与内容审核基于PaddlePaddle
  16. 个人收藏系列之360个人图书馆 轻松解除网页防复制难题
  17. 基于SSM的仓储管理系统
  18. 2021固原一中高考成绩查询,2021年固原市高考理科状元名单揭晓,今年固原市高考理科状元...
  19. 量化交易python入门书籍推荐_求量化投资入门书籍或课程推介。?
  20. 关于通达OA精灵的一点心得

热门文章

  1. ESP32 MicroPython开发之旅 基础篇② —— MicroPython 执行过程
  2. mapbox中对同一个图层layer,设置不同颜色要素
  3. 考上研究生了还能被刷?可能是这几点被忽略了!
  4. 记录下mitmproxy做代理,实现淘宝登陆
  5. 21款奔驰S400商务型升级后排电动座椅系统,提升后排乘坐舒适性
  6. 程序员如何提高打字速度和准确度
  7. 鼎桥通信,拥抱基础创新的“高灵活性”时代
  8. HDU 3371 Kruskal
  9. js转成tsd,也就是d.ts文件
  10. 高性能 CSS3 动画