问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

项目上线之前的具体优化策略

发布网友 发布时间:2024-09-10 12:41

我来回答

1个回答

热心网友 时间:2024-09-30 03:09

一、项目优化策略1.生成打包报告

1.vue-clibuild--report

2.vueui可视化面板中的仪表盘和分析面板

2.创建vue.config.js来修改webpack默认配置3.通过chainWebpack自定义打包入口

自定义打包入口有两种方式:configureWebpack和chainWebpack

最后选择的是chainWebpack来自定义打包入口,分为开发模式下的入口和上线后的入口

具体代码:

关键词process.env.NODE_ENV、config、when

module.exports={chainWebpack:config=>{config.when(process.env.NODE_ENV==='production',config=>{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')})}

}

##4.通过externals加载外部CDN资源默认情况下,通过import语法引入的第三方依赖包,最终会被打包合并到同一个文件中,从而导致打包成功后,单文件体积过大的问题![image.png](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/976bd41db1304a1781da5dc7112add59~tplv-k3u1fbpfcp-watermark.image?)为了解决上述问题,可以通过webpack的externals节点,来配置并加载外部的CDN资源,**凡是声明在externals中的第三方依赖包,都不会被打包,而是去winodw全局直接查找并使用具体对象,比如说vue,echarts等**>需要注意的是,这些优化方案都是在项目准备上线时的操作,如果继续想要在开发模式下使用的话,就还保持原来的import写法,否则,本地运行不出来或者空白页面#写在发布入口的配置文件下面,config.set('externals',{vue:'Vue','vue-router':'VueRouter',axios:'axios',lodash:'_',echarts:'echarts',nprogress:'NProgress','vue-quill-editor':'VueQuillEditor'})之后,我们需要在public/index.html中,添加我们上面各自的CDN资源<scriptsrc="https://cdn.staticfile.org/vue/2.5.22/vue.min.js"></script><scriptsrc="https://cdn.staticfile.org/vue-router/3.0.1/vue-router.min.js"></script><scriptsrc="https://cdn.staticfile.org/axios/0.18.0/axios.min.js"></script><scriptsrc="https://cdn.staticfile.org/lodash.js/4.17.11/lodash.min.js"></script><scriptsrc="https://cdn.staticfile.org/echarts/4.1.0/echarts.min.js"></script><scriptsrc="https://cdn.staticfile.org/nprogress/0.2.0/nprogress.min.js"></script><!--富文本编辑器的js文件--><scriptsrc="https://cdn.staticfile.org/quill/1.3.4/quill.min.js"></script><scriptsrc="https://cdn.jsdelivr.net/npm/vue-quill-editor@3.0.4/dist/vue-quill-editor.js"></script>到这里,我们的第三方依赖包(js)的CDN已经引入成功了,我们还需要继续引第三方样式(css)的依赖包.>需要注意的是,在引入CDN资源时,需要重视彼此之间的依赖关系和顺序,可能顺序不同,会导致不可预知的错误<!--nprogress的样式表文件--><linkrel="stylesheet"href="https://cdn.staticfile.org/nprogress/0.2.0/nprogress.min.css"/><!--富文本编辑器的样式表文件--><linkrel="stylesheet"href="https://cdn.staticfile.org/quill/1.3.4/quill.core.min.css"/><linkrel="stylesheet"href="https://cdn.staticfile.org/quill/1.3.4/quill.snow.min.css"/><linkrel="stylesheet"href="https://cdn.staticfile.org/quill/1.3.4/quill.bubble.min.css"/>##5.通过CDN优化ElementUI的打包虽然在开发阶段,我们启用了element-ui组件的按需加载。尽可能的减小打包的体积,但是那些被按需加载的组件,还是占用了较大的文件体积。![image.png](https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/62e49f96093e44e4ba3ccdcfe5444d61~tplv-k3u1fbpfcp-watermark.image?)此时,我们可以将element-ui中的组件,也通过CDN的形式来加载,这样能够进一步减小打包后的文件体积![image.png](https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/815829f1a8ad4fab8ac36900b4d7f0f0~tplv-k3u1fbpfcp-watermark.image?)**具体操作流程:**1.在main-prod.js中,注释掉elemeng-ui按需加载的代码2.在public/index.html的头部区域中,通过CDN加载element-ui的js和css样式

??

<linkrel="stylesheet"href="https://cdn.staticfile.org/element-ui/2.8.2/theme-chalk/index.css"/>

??

chainWebpack:config=>{config.when(process.env.NODE_ENV==='production',config=>{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')})}0chainWebpack:config=>{config.when(process.env.NODE_ENV==='production',config=>{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')})}1

chainWebpack:config=>{//发布模式config.when(process.env.NODE_ENV==='production',config=>{

chainWebpack:config=>{config.when(process.env.NODE_ENV==='production',config=>{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')})}2chainWebpack:config=>{config.when(process.env.NODE_ENV==='production',config=>{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')})}3

//按需渲染页面的标题?<%=%>是模板字符串中的语法,也就是输出的意思

<%=htmlwebpackplugin.options.isprod="">电商后台管理系统</%=>

//按需加载外部的CDN资源?<%%>是客户端用来获取服务端变量的代码,一般把html和服务器代码写在一起的时候,使用此种方式<%if(htmlWebpackPlugin.options.isProd){%>

<!--nprogress的样式表文件--><linkrel="stylesheet"href="https://cdn.staticfile.org/nprogress/0.2.0/nprogress.min.css"/><!--富文本编辑器的样式表文件--><linkrel="stylesheet"href="https://cdn.staticfile.org/quill/1.3.4/quill.core.min.css"/><linkrel="stylesheet"href="https://cdn.staticfile.org/quill/1.3.4/quill.snow.min.css"/><linkrel="stylesheet"href="https://cdn.staticfile.org/quill/1.3.4/quill.bubble.min.css"/><!--element-ui的样式表文件--><linkrel="stylesheet"href="https://cdn.staticfile.org/element-ui/2.8.2/theme-chalk/index.css"/><scriptsrc="https://cdn.staticfile.org/vue/2.5.22/vue.min.js"></script><scriptsrc="https://cdn.staticfile.org/vue-router/3.0.1/vue-router.min.js"></script><scriptsrc="https://cdn.staticfile.org/axios/0.18.0/axios.min.js"></script><scriptsrc="https://cdn.staticfile.org/lodash.js/4.17.11/lodash.min.js"></script><scriptsrc="https://cdn.staticfile.org/echarts/4.1.0/echarts.min.js"></script><scriptsrc="https://cdn.staticfile.org/nprogress/0.2.0/nprogress.min.js"></script><!--富文本编辑器的js文件--><scriptsrc="https://cdn.staticfile.org/quill/1.3.4/quill.min.js"></script><scriptsrc="https://cdn.jsdelivr.net/npm/vue-quill-editor@3.0.4/dist/vue-quill-editor.js"></script><!--element-ui的js文件-->chainWebpack:config=>{config.when(process.env.NODE_ENV==='production',config=>{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')})}0

<%}%>

chainWebpack:config=>{config.when(process.env.NODE_ENV==='production',config=>{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')})}5

//这是项目发布阶段需要用到的babel插件constprodPlugins=[]if(process.env.NODE_ENV==='production'){prodPlugins.push('transform-remove-console')}

module.exports={presets:['@vue/app'],plugins:[['component',{libraryName:'element-ui',styleLibraryName:'theme-chalk'}],//发布产品时候的插件数组...prodPlugins,'@babel/plugin-syntax-dynamic-import'??(这里声明插件)]}

chainWebpack:config=>{config.when(process.env.NODE_ENV==='production',config=>{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')})}6

//importLoginfrom'./components/Login.vue'constLogin=()=>import(/webpackChunkName:"login_home_welcome"/'./components/Login.vue')//importHomefrom'./components/Home.vue'constHome=()=>import(/webpackChunkName:"login_home_welcome"/'./components/Home.vue')//importWelcomefrom'./components/Welcome.vue'constWelcome=()=>import(/webpackChunkName:"login_home_welcome"/'./components/Welcome.vue')

//importUsersfrom'./components/user/Users.vue'constUsers=()=>import(/webpackChunkName:"Users_Rights_Roles"/'./components/user/Users.vue')//importRightsfrom'./components/power/Rights.vue'constRights=()=>import(/webpackChunkName:"Users_Rights_Roles"/'./components/power/Rights.vue')//importRolesfrom'./components/power/Roles.vue'constRoles=()=>import(/webpackChunkName:"Users_Rights_Roles"/'./components/power/Roles.vue')

chainWebpack:config=>{config.when(process.env.NODE_ENV==='production',config=>{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')})}7

constexpress=require('express')constcompression=require('compression')consthttps=require('https')constfs=require('fs')constapp=express()

//配置ssl证书constoptions={cert:fs.readFileSync('./full_chain.pem'),key:fs.readFileSync('./private.key')}

//一定要把这一行代码,写到静态资源托管之前app.use(compression())app.use(express.static('./dist'))

app.listen(80,()=>{console.log('serverrunningathttp://127.0.0.1')})

//使用https协议//https.createServer(options,app).listen(443)

chainWebpack:config=>{config.when(process.env.NODE_ENV==='production',config=>{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')})}8

//1.安装相应包npminstallcompression-D

//2.导入包(必须保证在静态资源dist托管之前,才能生效)constcompression=require('compression');//app.use(express.static('./dist'))

//3.启用中间件app.use(compression())

chainWebpack:config=>{config.when(process.env.NODE_ENV==='production',config=>{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')})}9

consthttps=require('https')constfs=require('fs')

//配置ssl证书constoptions={cert:fs.readFileSync('./full_chain.pem'),key:fs.readFileSync('./private.key')}//https协议的默认端口是443http的默认端口是80https.createServer(options,app).listen(443)

##4.通过externals加载外部CDN资源默认情况下,通过import语法引入的第三方依赖包,最终会被打包合并到同一个文件中,从而导致打包成功后,单文件体积过大的问题![image.png](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/976bd41db1304a1781da5dc7112add59~tplv-k3u1fbpfcp-watermark.image?)为了解决上述问题,可以通过webpack的externals节点,来配置并加载外部的CDN资源,**凡是声明在externals中的第三方依赖包,都不会被打包,而是去winodw全局直接查找并使用具体对象,比如说vue,echarts等**>需要注意的是,这些优化方案都是在项目准备上线时的操作,如果继续想要在开发模式下使用的话,就还保持原来的import写法,否则,本
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
PCR有哪些分类? 不鸣则已 一鸣惊人的三个星座 电动车加装蓝牙音箱怎么接线 怎么把QQ同步助手卸载掉?简直就是垃圾,什么没操作就直接给安装上了,怎... 怎么把QQ同步助手卸载掉?简直就是流氓软件。什么东西没经过我点‘’同 ... excel表如何将相间隔的不同两行组合在一起,成为一行? excel工作表如何对行各自组合 考科目一自己去还是驾校统一去 科目一是自己考还是在驾校 社保转移后,新单位没要转移单,只要了身份证,是不是就可以办理了 什么是社保转移 Vue项目性能优化实操,从50分到80分 vue编程中加载优化策略有哪些? Excel统计函数——加权平均 中秋节应该给领导送点什么水果好呢? 如何在excel中计算数据的加权平均 外阴长疙瘩又疼又痒怎么回事 外阴瘙痒有小红疙瘩是怎么回事 十岁小女孩外阴痒是怎么回事 外阴长红疙瘩还痒怎么办 外阴长小疙瘩怎么回事 维佳夹心奶油的制作配方 西红柿鸡蛋怎么炒?先炒鸡蛋还是先炒西红柿 成都市哪一片地区治安比较好、房租又不太贵、而且交通方便的? 请问一下在成都哪里的房租要便宜一点,我想要搬房子了。 心率失眠是什么意思? 最近失眠会影响心率吗 失眠会不会引起心率过速 cad怎么计算周长和面积? 生姜烤干对营养价值有哪些影响? 西葫芦鸡蛋饺子的做法(西葫芦鸡蛋饺子馅怎么调) 餐饮logo设计有什么表现形式 王者荣耀买什么近战英雄最值! 流水如何在王者荣耀哪个英雄 三鹤六堡茶三鹤六堡茶 为什么微信老是提示该微信号使用外挂, 我在玩微信,提示我使用非法软件,怎么回事。 新人写手一般去哪些网站发布文章比较好呢? 纸杯小蛋糕操 作: 眩晕的预防和生活调养 经常头晕的原因有哪些 这些告诉你答案 时常头晕是什么原因 阴谋论的背后,才是阴谋 清华驻村博士生的思考:警惕“泛清真化”背后的阴谋 乌龟被我用开水烫伤了,半死不活的,怎么办啊。就是这只龟,这是原来照... 王耀南在聂荣臻指挥下参与的战役中有哪些突出贡献? 刘德华暗战中走在大街上的图片 乌鲁木齐县监察局内设机构 透视眼镜效果图 我是乌鲁木齐应届毕业生,请问档案和户籍放到南湖好还是自治区团委,都... 右肾疼怎么回事 右边蛋子都疼