骨架屏技术讲解以及如何在Vue中实现骨架屏,2024年最新华为前端面试题

2、我们还需要在新建一个 webpack.skeleton.conf.js 文件,以专门用来进行骨架屏的构建(这个文件放在哪里无所谓,可以放在根目录下,也可以放在 build 目录中)。这是一个 webpack 的配置文件,配合使用 vue-server-renderer 将我们的 skeleton.vue 文件内容构建为单个的 json 格式的文件(这是 Vue SSR 渲染的策略)

// webpack.skeleton.conf.js

‘use strict’

const path = require(‘path’)

const nodeExternals = require(‘webpack-node-externals’)

const VueSSRServerPlugin = require(‘vue-server-renderer/server-plugin’)

module.exports = {

target: ‘node’,

devtool: ‘#source-map’,

entry: ‘./src/skeleton/skeleton.entry.js’,

output: {

path: path.resolve(__dirname, ‘…/dist’),

publicPath: ‘/dist/’,

filename: ‘[name].js’,

libraryTarget: ‘commonjs2’

},

module: {

noParse: /es6-promise.js$/, // avoid webpack shimming process

rules: [

{

test: /.vue$/,

loader: ‘vue-loader’,

options: {

compilerOptions: {

preserveWhitespace: false

}

}

},

{

test: /.css$/,

use: [‘vue-style-loader’, ‘css-loader’]

}

]

},

performance: {

hints: false

},

externals: nodeExternals({

// do not externalize CSS files in case we need to import it from a dep

whitelist: /.css$/

}),

plugins: [

// 这是将服务器的整个输出构建为单个 JSON 文件的插件。

// 默认文件名为 vue-ssr-server-bundle.json

new VueSSRServerPlugin({

filename: ‘skeleton.json’

})

]

}

3、写完 skeleton.vue 的内容以后,使用 webpack-cli 运行这个 webpack.skeleton.conf.js 配置文件。

// package.json

“skeleton”: “webpack --progress --config build/webpack.skeleton.conf.js”

然后运行:

npm i webpack-cli@3.3.10 -D

npm run skeleton

就会在 dist 文件夹中生成一个skeleton.json 文件。

4、将 skeleton.json 内容插入到模版文件 index.html 中。(在根目录下创建一个 skeleton.js 文件)

// skeleton.js

const fs = require(‘fs’)

const { resolve } = require(‘path’)

const { createBundleRenderer } = require(‘vue-server-renderer’)

function createRenderer(bundle, options) {

return createBundleRenderer(bundle, Object.assign(options, {

// recommended for performance

// runInNewContext: false

}))

}

const handleError = err => {

console.error(error during render : ${req.url})

console.error(err.stack)

}

const bundle = require(‘./dist/skeleton.json’)

const templatePath = resolve(‘./index.html’)

const template = fs.readFileSync(templatePath, ‘utf-8’)

const renderer = createRenderer(bundle, {

template

})

// console.log(renderer)

/**

  • 说明:

  • 默认的index.html中包含<%= BASE_URL %>的插值语法

  • 我们不在生成骨架屏这一步改变模板中的这个插值

  • 因为这个插值会在项目构建时完成

  • 但是如果模板中有这个插值语法,而我们在vue-server-renderder中使用这个模板,而不传值的话,是会报错的

  • 所以,我们去掉模板中的插值,而使用这个传参的方式,再将这两个插值原模原样返回到模板中

  • 文档: https://cli.vuejs.org/zh/guide/html-and-static-assets.html#%E6%8F%92%E5%80%BC

*/

const context = {

title: ‘’, // default title

meta: `

`

}

renderer.renderToString(context, (err, html) => {

if(err) {

return handleError(err)

}

fs.writeFileSync(resolve(__dirname, ‘./index.html’), html, ‘utf-8’)

})

5、模版 index.html 加上插槽注解

这里需要注意的是:index.html 中的 div#app 中要加一个注解插槽,<!--vue-ssr-outlet--> 这个是必须的,Vue SSR 文档中有说这个。这个注解是必须的,请注意!

vue-for-test

参考连接:https://ssr.vuejs.org/zh/guide/#%E4%BD%BF%E7%94%A8%E4%B8%80%E4%B8%AA%E9%A1%B5%E9%9D%A2%E6%A8%A1%E6%9D%BF

6、执行

node skeleton.js

执行成功后,模版 index.html 中的 div#app 中的内容就会变成我们的骨架屏代码;

7、看一下效果

在这里插入图片描述

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
img

总结

秋招即将开始,校招的朋友普遍是缺少项目经历的,所以底层逻辑,基础知识要掌握好!

而一般的社招,更是神仙打架。特别强调,项目经历不可忽视;几乎简历上提到的项目都会被刨根问底,所以项目应用的技术要熟练,底层原理必须清楚。

这里给大家提供一份汇集各大厂面试高频核心考点前端学习资料。涵盖 HTML,CSS,JavaScript,HTTP,TCP协议,浏览器,Vue框架,算法等高频考点238道(含答案)

资料截图 :

高级前端工程师必备资料包

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

981487b285a8b90918f35c830c299df8.png)

高级前端工程师必备资料包

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-U48FCcBv-1712805040559)]

  • 16
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值