All Projects → lybenson → Bilibili Vue

lybenson / Bilibili Vue

Licence: mit
前端vue+后端koa,全栈式开发bilibili首页

Programming Languages

Vue
7211 projects
javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to Bilibili Vue

Vue Blog
A single-user blog built with vue2, koa2 and mongodb which supports Server-Side Rendering
Stars: ✭ 586 (-77.37%)
Mutual labels:  koa2, axios, vuex2, vue2
Vue Admin Element
(Vue2 演示项目)物业后台管理系统 - ElementUI ( 基本结构已完成, 剩下的就是具体业务开发; 如有疑问请留言 )
Stars: ✭ 73 (-97.18%)
Mutual labels:  axios, vuex2, vue2
Github Ranking
🔍GitHub不同语言热门项目排行,Vue.js做页面展示
Stars: ✭ 160 (-93.82%)
Mutual labels:  koa2, axios, vue2
Eagles
eagles for vue componets of silianpan
Stars: ✭ 95 (-96.33%)
Mutual labels:  koa2, axios, vue2
Magicmusic
🎵帅气的手机端音乐播放器(vue vue-router vuex flex ...)
Stars: ✭ 350 (-86.49%)
Mutual labels:  axios, vuex2, vue2
Vue Scscms
基于koa2+mysql+vue2.0+Element阳光内容管理系统,模范学习Demo
Stars: ✭ 284 (-89.03%)
Mutual labels:  koa2, axios, vue2
Vue Cnode
🔥Vue.js打造一个开源的CNode社区。CNode by Vue.js
Stars: ✭ 249 (-90.39%)
Mutual labels:  axios, vuex2, vue2
Vue Chat
👥Vue全家桶+Socket.io+Express/Koa2打造一个智能聊天室。
Stars: ✭ 887 (-65.75%)
Mutual labels:  koa2, vuex2, vue2
Vue Qq
🎨 Vue family bucket with socket.io and express/koa2 , create a web version of mobile QQ, supporting real-time group chat, real-time private chat, special care, shielding chat, smart IP geographic location, real-time display temperature and other QQ core functions
Stars: ✭ 861 (-66.76%)
Mutual labels:  koa2, axios, vue2
Vue2 Admin
基于vue-element-admin、Vue2 权限、监控、管理系统(包含地图等嵌套)
Stars: ✭ 74 (-97.14%)
Mutual labels:  axios, vue2
Vue2 Qq
一个基于兴趣,为了学习,提高能力的项目
Stars: ✭ 90 (-96.53%)
Mutual labels:  axios, vuex2
Record
Vue + Nodejs + Mongodb构建的校园打卡系统,支持csv文件上传名单🚀
Stars: ✭ 94 (-96.37%)
Mutual labels:  vuex2, vue2
Vue Mall
微信公众号测试项目
Stars: ✭ 74 (-97.14%)
Mutual labels:  axios, vue2
Vue Tutorial
vue2.0-tutorial
Stars: ✭ 1,165 (-55.02%)
Mutual labels:  vuex2, vue2
Seppf
普兰能效平台开源版(前端)
Stars: ✭ 104 (-95.98%)
Mutual labels:  axios, vue2
Vue2 Shop
A shop developed with Vue2 + Vue-router + Axios + Vuex + Node + Express + MongoDB + Webpack
Stars: ✭ 103 (-96.02%)
Mutual labels:  axios, vue2
Vue Admin
基于Vue2、element ui、vue-cli、vuex、vue-router、axios 、echarts后台管理系统demo. 权限管理,用户管理,菜单管理。无限级菜单,下拉树形选择框
Stars: ✭ 1,135 (-56.18%)
Mutual labels:  axios, vue2
Vuedemo sell eleme
ele by vue2.x 🐧
Stars: ✭ 1,349 (-47.92%)
Mutual labels:  axios, vue2
Vue2 Element
基于vue2 + vue-router2 + element-ui + vuex2 + fetch + webpack2 企业级后台管理系统最佳实践
Stars: ✭ 112 (-95.68%)
Mutual labels:  vuex2, vue2
Vue Cli Multi Page
基于vue-cli模板的多页面多路由项目,一个PC端页面入口,一个移动端页面入口,且有各自的路由, vue+webpack+vue-router+vuex+mock+axios
Stars: ✭ 145 (-94.4%)
Mutual labels:  axios, vue2

预览地址: http://www.lybenson.com/bilibili/

技术栈

前端:vue3 + vuex + vite + stylus + nginx

后端:koa2

项目运行

源码地址: https://github.com/lybenson/bilibili-vue

如何运行

运行前请先安装nodejs

clone项目到本地

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

前端运行

cd bilibili-vue && yarn && yarn dev

后端运行

cd bilibili-vue/bilibili-api && yarn install && yarn 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。每次发起网络需要经历下面的步骤

  1. 请求中

    rootState.requesting = true  //请求状态更新为true,表示请求中
    commit(TYPE.XX_REQUEST)  // 发送同步操作,请求中的数据处理
    
  2. 请求成功

    rootState.requesting = false  //请求状态更新为false,表示请求结束
    commit(TYPE.XX_SUCCESS, response) //发送同步操作,处理请求成功后数据
    
  3. 请求失败

    rootState.requesting = false  //请求状态更新为false,表示请求结束
    rootState.error = error
    commit(TYPE.XX_FAILURE, error) //发送同步操作,处理请求失败
    

动画

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

  1. hover效果触发。

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

  3. 通过vue提供的动画方式。

    <transition name="fade">
     <div v-if="isSort">
         <div class="tip"></div>
         <div class="custom-bg"></div>
     </div>
    </transition>

样式

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

npm install stylus-loader --save-dev
npm install stylus --save-dev

性能优化

  • 图片懒加载

  • 压缩jscss

  • 服务器开启gzip

  • 浏览器缓存

  • ...

发布

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

后端发布

后端采用pm2做项目管理

安装pm2

npm install pm2 -g

启动项目

cd bilibili-api && npm install 
pm2 start index.js

前端发布

  1. 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'
}

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

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

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

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

  1. 配置nginx服务器。

    location /bilibili {
      root /var/www/html;
      index index.html;
    }
    

总结

相关截图:

首页:

20170423210104.png

轮播:

20170423213449.png

直播:

20170423210140.png 20170423210218.png

排行:

20170423210248.png

游戏:

20170423213519.png

拖拽排序与滚动效果:

20170423213599.png

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].