day07 - 进度条 +打包报告 + 第三方库CDN引入 + 路由懒加载(2)

本文介绍了如何在Vue.js项目中优化前端性能,包括加载外部CDN以减小JS文件体积,通过externals配置排除打包第三方库,使用路由懒加载提高用户体验,并详细阐述了配置过程。同时,提到了项目上线时通过Node.js创建服务器的步骤。
摘要由CSDN通过智能技术生成

module.exports = {

chainWebpack:config=>{

//发布模式

config.when(process.env.NODE_ENV === ‘production’,config=>{

//entry找到默认的打包入口,调用clear则是删除默认的打包入口

//add添加新的打包入口

config.entry(‘app’).clear().add(‘./src/main-prod.js’)

})

//开发模式

config.when(process.env.NODE_ENV === ‘development’,config=>{

config.entry(‘app’).clear().add(‘./src/main-dev.js’)

})

}

}

补充:

chainWebpack可以通过链式编程的形式,修改webpack配置

configureWebpack可以通过操作对象的形式,修改webpack配置

7.加载外部CDN

默认情况下,依赖项的所有第三方包都会被打包到js/chunk-vendors.******.js文件中,导致该js文件过大

那么我们可以通过externals排除这些包,使它们不被打包到js/chunk-vendors.******.js文件中

module.exports = {

chainWebpack:config=>{

//发布模式

config.when(process.env.NODE_ENV === ‘production’,config=>{

//entry找到默认的打包入口,调用clear则是删除默认的打包入口

//add添加新的打包入口

config.entry(‘app’).clear().add(‘./src/main-prod.js’)

//使用externals设置排除项

config.set(‘externals’,{

vue:‘Vue’,

‘vue-router’:‘VueRouter’,

axios:‘axios’,

lodash:‘_’,

echarts:‘echarts’,

nprogress:‘NProgress’,

‘vue-quill-editor’:‘VueQuillEditor’

})

})

//开发模式

config.when(process.env.NODE_ENV === ‘development’,config=>{

config.entry(‘app’).clear().add(‘./src/main-dev.js’)

})

}

}

设置好排除之后,为了使我们可以使用vueaxios等内容,我们需要加载外部CDN的形式解决引入依赖项。

打开开发入口文件main-prod.js,删除掉默认的引入代码

import Vue from ‘vue’

import App from ‘./App.vue’

import router from ‘./router’

// import ‘./plugins/element.js’

//导入字体图标

import ‘./assets/fonts/iconfont.css’

//导入全局样式

import ‘./assets/css/global.css’

//导入第三方组件vue-table-with-tree-grid

import TreeTable from ‘vue-table-with-tree-grid’

//导入进度条插件

import NProgress from ‘nprogress’

//导入进度条样式

// import ‘nprogress/nprogress.css’

// //导入axios

import axios from ‘axios’

// //导入vue-quill-editor(富文本编辑器)

import VueQuillEditor from ‘vue-quill-editor’

// //导入vue-quill-editor的样式

// import ‘quill/dist/quill.core.css’

// import ‘quill/dist/quill.snow.css’

// import ‘quill/dist/quill.bubble.css’

axios.defaults.baseURL = ‘http://127.0.0.1:8888/api/private/v1/’

//请求在到达服务器之前,先会调用use中的这个回调函数来添加请求头信息

axios.interceptors.request.use(config => {

//当进入request拦截器,表示发送了请求,我们就开启进度条

NProgress.start()

//为请求头对象,添加token验证的Authorization字段

config.headers.Authorization = window.sessionStorage.getItem(“token”)

//必须返回config

return config

})

//在response拦截器中,隐藏进度条

axios.interceptors.response.use(config =>{

//当进入response拦截器,表示请求已经结束,我们就结束进度条

NProgress.done()

return config

})

Vue.prototype.$http = axios

Vue.config.productionTip = false

//全局注册组件

Vue.component(‘tree-table’, TreeTable)

//全局注册富文本组件

Vue.use(VueQuillEditor)

//创建过滤器将秒数过滤为年月日,时分秒

Vue.filter(‘dateFormat’,function(originVal){

const dt = new Date(originVal)

const y = dt.getFullYear()

const m = (dt.getMonth()+1+‘’).padStart(2,‘0’)

const d = (dt.getDate()+‘’).padStart(2,‘0’)

const hh = (dt.getHours()+‘’).padStart(2,‘0’)

const mm = (dt.getMinutes()+‘’).padStart(2,‘0’)

const ss = (dt.getSeconds()+‘’).padStart(2,‘0’)

return ${y}-${m}-${d} ${hh}:${mm}:${ss}

})

new Vue({

router,

render: h => h(App)

}).$mount(‘#app’)

然后打开public/index.html添加外部cdn引入代码

电商后台管理系统

We’re sorry but vue_shop doesn’t work properly without JavaScript enabled. Please enable it to continue.

8.定制首页内容

开发环境的首页和发布环境的首页展示内容的形式有所不同

如开发环境中使用的是import加载第三方包,而发布环境则是使用CDN,那么首页也需根据环境不同来进行不同的实现

我们可以通过插件的方式来定制首页内容,打开vue.config.js,编写代码如下:

module.exports = {

chainWebpack:config=>{

config.when(process.env.NODE_ENV === ‘production’,config=>{

//使用插件

config.plugin(‘html’).tap(args=>{

//添加参数isProd

args[0].isProd = true

return args

})

})

config.when(process.env.NODE_ENV === ‘development’,config=>{

config.entry(‘app’).clear().add(‘./src/main-dev.js’)

//使用插件

config.plugin(‘html’).tap(args=>{

//添加参数isProd

args[0].isProd = false

return args

})

})

}

}

然后在public/index.html中使用插件判断是否为发布环境并定制首页内容

<%= htmlWebpackPlugin.options.isProd ? '' : 'dev - ' %>电商后台管理系统

<% if(htmlWebpackPlugin.options.isProd){ %>

<% } %>

9.路由懒加载

当路由被访问时才加载对应的路由文件,就是路由懒加载。

路由懒加载实现步骤:

1.安装 @babel/plugin-syntax-dynamic-import

打开vue控制台,点击依赖->安装依赖->开发依赖->搜索@babel/plugin-syntax-dynamic-import

点击安装。

2.在babel.config.js中声明该插件,打开babel.config.js

//项目发布阶段需要用到的babel插件

const productPlugins = []

//判断是开发还是发布阶段

if(process.env.NODE_ENV === ‘production’){

//发布阶段

productPlugins.push(“transform-remove-console”)

}

module.exports = {

“presets”: [

“@vue/app”

],

“plugins”: [

[

“component”,

{

“libraryName”: “element-ui”,

“styleLibraryName”: “theme-chalk”

}

],

…productPlugins,

//配置路由懒加载插件

“@babel/plugin-syntax-dynamic-import”

]

}

3.将路由更改为按需加载的形式,打开router.js,更改引入组件代码如下:

import Vue from ‘vue’

import Router from ‘vue-router’

const Login = () => import(/* webpackChunkName:“login_home_welcome” */ ‘./components/Login.vue’)

// import Login from ‘./components/Login.vue’

const Home = () => import(/* webpackChunkName:“login_home_welcome” */ ‘./components/Home.vue’)

// import Home from ‘./components/Home.vue’

const Welcome = () => import(/* webpackChunkName:“login_home_welcome” */ ‘./components/Welcome.vue’)

// import Welcome from ‘./components/Welcome.vue’

const Users = () => import(/* webpackChunkName:“user” */ ‘./components/user/Users.vue’)

// import Users from ‘./components/user/Users.vue’

const Rights = () => import(/* webpackChunkName:“power” */ ‘./components/power/Rights.vue’)

// import Rights from ‘./components/power/Rights.vue’

const Roles = () => import(/* webpackChunkName:“power” */ ‘./components/power/Roles.vue’)

// import Roles from ‘./components/power/Roles.vue’

const Cate = () => import(/* webpackChunkName:“goods” */ ‘./components/goods/Cate.vue’)

// import Cate from ‘./components/goods/Cate.vue’

const Params = () => import(/* webpackChunkName:“goods” */ ‘./components/goods/Params.vue’)

// import Params from ‘./components/goods/Params.vue’

const GoodList = () => import(/* webpackChunkName:“goods” */ ‘./components/goods/List.vue’)

// import GoodList from ‘./components/goods/List.vue’

const GoodAdd = () => import(/* webpackChunkName:“goods” */ ‘./components/goods/Add.vue’)

// import GoodAdd from ‘./components/goods/Add.vue’

const Order = () => import(/* webpackChunkName:“order” */ ‘./components/order/Order.vue’)

// import Order from ‘./components/order/Order.vue’

const Report = () => import(/* webpackChunkName:“report” */ ‘./components/report/Report.vue’)

// import Report from ‘./components/report/Report.vue’

10.项目上线

A.通过node创建服务器

vue_shop同级创建一个文件夹vue_shop_server存放node服务器

使用终端打开vue_shop_server文件夹,输入命令npm init -y

初始化包之后,输入命令npm i express -S

打开vue_shop目录,复制dist文件夹,粘贴到vue_shop_server

vue_shop_server文件夹中创建app.js文件,编写代码如下:

const express = require(‘express’)

const app = express()

app.use(express.static(‘./dist’))

app.listen(8998,()=>{

最后

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

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

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

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

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

app.listen(8998,()=>{

最后

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

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

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

[外链图片转存中…(img-QSBRWqhu-1714847559091)]

[外链图片转存中…(img-Cp37IOOh-1714847559092)]

[外链图片转存中…(img-cZPjGMMV-1714847559092)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值