vue-cli3 配置骨架屏方案

vue-cli3配置骨架屏方案

前言

最近在学vue,准备使用vue写一个移动端项目。考虑到首页白屏优化,需要实现骨架屏需求。

步骤

  • 安装vue-skeleton-webpack-plugin插件
npm install --save-dev vue-skeleton-webpack-plugin
  • vue.config.js配置
const path = require('path')
const SkeletonWebpackPlugin = require('vue-skeleton-webpack-plugin');

module.exports = {
    css: {
         extract: true, // css拆分ExtractTextPlugin插件,默认true - 骨架屏需要为true
    },
    
    configureWebpack: (config)=>{
        // vue骨架屏插件配置
        config.plugins.push(new SkeletonWebpackPlugin({
          webpackConfig: {
            entry: {
              app: path.join(__dirname, './src/utils/skeleton.js'),
            },
          },
          minimize: true,
          quiet: true,
        }))
  },
}
  • 新建一个skeleton.js文件放在src->utils文件夹下面、
import Vue from 'vue';
import Skeleton from '../components/Skeleton/skeleton-2';

export default new Vue({
  components: {
    Skeleton,
  },
  render: h => h(Skeleton),
});

这个文件是用来注入骨架屏的
  • 新建一个skeleton-2.vue骨架屏组件




  • 新建一个skeleton-1.vue骨架屏组件



  • 修改main.js配置
const app = new Vue({
  store,
  router,
  render: h => h(App)
}).$mount('#app')
  • 重启项目

思路

  • 将骨架屏也看成路由组件,在构建时使用 Vue 预渲染功能,将骨架屏组件的渲染结果 HTML 片段插入 HTML 页面模版的挂载点中,将样式内联到 head 标签中。这样等前端渲染完成时,Vue 将使用客户端混合,把挂载点中的骨架屏内容替换成真正的页面内容。

缺点

  • 这种方案实现的是固定死的骨架(可以查看skeleton-2.vue skeleton-1.vue)两个文件,不能够自动根据页面DOM结构生成骨架

优化的方向

  • 饿了么团队 page-skeleton-webpack-plugin开发的自动生成页面骨架屏方案

参考

  • 饿了么的 PWA 升级实践
  • 为vue项目添加骨架屏

你可能感兴趣的:(vue-cli3 配置骨架屏方案)