进度条插件,地址:https://github.com/rstacruz/nprogress
npm i nprogress --save
例如,每次路由切换显示进度条,在路由index.js中进行配置
//顶部页面加载条
import NProgress from 'nprogress';
import 'nprogress/nprogress.css';
//配置
NProgress.configure({
easing: 'ease', //缓和模式
speed: 500, //速度
showSpinner: false, //显示右侧旋转
trickleSpeed: 200,
minimum: 0.3 //最小值,也就是起始位置
})
//路由监听
router.beforeEach((to, from, next) => {
NProgress.start();
next();
});
//路由跳转结束
router.afterEach(() => {
NProgress.done()
})
在App.vue中进行样式配置
/* 更改进度条颜色 */
#nprogress .bar {
background: #f10180 !important;
height: 3px !important;
}
也可以绑定在Vue的原型对象上进行使用
import NProgress from 'nprogress';
import 'nprogress/nprogress.css';
//配置
NProgress.configure({
easing: 'ease', //缓和模式
speed: 500, //速度
showSpinner: false, //显示右侧旋转
trickleSpeed: 200,
minimum: 0.3 //最小值,也就是起始位置
})
Vue.prototype.$NP = NProgress;
api
// 开启进度条
NProgress.start() — shows the progress bar
// 引动到指定位置
NProgress.set(0.4) — sets a percentage
// 前进一点点
NProgress.inc() — increments by a little
// 跑完
NProgress.done() — completes the progress
如果服务器端渲染 (SSR) 只是用来改善少数营销页面(例如 /, /about, /contact 等)的 SEO,那么你可能需要预渲染。无需使用 web 服务器实时动态编译 HTML,而是使用预渲染方式,在构建时 (build time) 简单地生成针对特定路由的静态 HTML 文件。优点是设置预渲染更简单,并可以将你的前端作为一个完全静态的站点。
预渲染页面方式由于不需要web服务器的参与,设置比SSR更简单,特别适合用来展示一些静态页面,比如根据页面UI来自动生成骨架屏。
1、安装,webpack4和webpack5不一样,原生的只支持4,所以如果是5的话,就需要使用第三方重写的
# 对于webpack4
npm i prerender-spa-plugin --save-dev
# 对于webpack5
npm i @dreysolano/prerender-spa-plugin --save-dev
2、vue.config.js
中进行配置
const { defineConfig } = require('@vue/cli-service')
//1.引入path:
const path = require('path');
//2.封装方法:
function resolve(dir){
return path.resolve(__dirname,dir)
}
// 引入预渲染插件
// 如果是webpack4
// const PrerenderSPAPlugin = require('prerender-spa-plugin');
// 如果是webpack5
const PrerenderSPAPlugin = require('@dreysolano/prerender-spa-plugin');
const Renderer = PrerenderSPAPlugin.PuppeteerRenderer;
module.exports = defineConfig({
configureWebpack: (config) => {
// 开发生产共同配置别名
Object.assign(config.resolve, {
alias: {
'@': resolve('src'),
'@assets': resolve('src/assets'),
'@views': resolve('src/views'),
'@components': resolve('src/components'),
}
});
// 设置为在打包环境下运行
if (process.env.NODE_ENV !== 'production') return;
return {
// 主要部分
plugins: [
new PrerenderSPAPlugin({
staticDir: path.join(__dirname, 'dist'),
// 需要预渲染的路径,此处的路径不可以使用懒加载
routes: ['/home','/about'],
// 这个很重要,如果没有配置这段,也不会进行预编译
renderer: new Renderer({
inject: {
foo: 'bar'
},
headless: false, //为false会开启浏览器调试
renderAfterTime: 5000,
// 在 main.js 中 document.dispatchEvent(new Event('render-event')),两者的事件名称要对应上。
renderAfterDocumentEvent: 'render-event'
})
})
]
}
},
})
3、main.js
中挂载事件
new Vue({
router,
store,
render: h => h(App),
// 挂载预渲染事件
mounted() {
document.dispatchEvent(new Event('render-event'))
}
}).$mount('#app')
4、执行命令npm run build
,dist目录下就可以看到路径对应的静态页面