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#插值
*/
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 文档中有说这个。这个注解是必须的,请注意!
参考连接:https://ssr.vuejs.org/zh/guide/#使用一个页面模板
6、执行
node skeleton.js
执行成功后,模版 index.html
中的 div#app
中的内容就会变成我们的骨架屏代码;
7、看一下效果
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
总结
秋招即将开始,校招的朋友普遍是缺少项目经历的,所以底层逻辑,基础知识要掌握好!
而一般的社招,更是神仙打架。特别强调,项目经历不可忽视;几乎简历上提到的项目都会被刨根问底,所以项目应用的技术要熟练,底层原理必须清楚。
这里给大家提供一份汇集各大厂面试高频核心考点前端学习资料。涵盖 HTML,CSS,JavaScript,HTTP,TCP协议,浏览器,Vue框架,算法等高频考点238道(含答案)!
资料截图 :
高级前端工程师必备资料包
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
981487b285a8b90918f35c830c299df8.png)
高级前端工程师必备资料包
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-U48FCcBv-1712805040559)]