vue项目打包上线的方法(vue项目打包以及优化的实现步骤)
vue项目打包上线的方法
vue项目打包以及优化的实现步骤目录
- vue项目的打包上线及优化
- vue项目的打包
- 项目托管
- 项目的常见优化
项目完成,我们会将项目进行上线,为了提升性能,我们往往会进行一些优化处理
vue项目的打包
脚手架项目中有一个默认的打包命令,我们可以输入npm run bulid来对项目进行打包
打开终端,切换到项目根目录
输入命令:npm run build
会在当前项目的根目录下生成一个dist文件夹,里面就是打包后的文件
项目托管
我们可以创建一个简易的node服务器来托管打包后的项目,这样就可以模拟访问服务器的项目
1.创建一个新的目录做为服务器根目录,小黑窗执行node init -y执行初始化,再执行npm i express下载express包,然后创建app.js文件将下面代码拷贝进来(利用express包开一个服务器)
2.将刚刚打包生成的dist目录整体拷贝到node服务器目录下
3.资源在dist目录下,所以可以使用静态资源托管的方式提供资源,将dist目录做为资源托管目录
express创建服务器
var express = require('express') const path = require('path') // 2. 创建服务器 var app = express(); // 托管静态资源 // 也可以将所有静态资源放置到指定的目录下,如public,然后添加以下的配置 app.use(express.static('dist')) app.use('/', express.static(path.join(__dirname, 'dist'))) // 3. 开启服务器并监听端口 app.listen(3001, () => { console.log('http://127.0.0.1:3001') })
启动服务器
在服务器目录下打开终端,输入node app.js
在浏览器中输入服务器地址
项目的常见优化
项目打包之后,会将之前所使用到的部署依赖包和项目中使用到的外部资源都打包
如果之前引入的包很多,或者引入的不必需的包,那么会增大项目的体积,从而造成用户访问的时候需要请求更多的数据才能正常的访问,不利于用户体验,所以需要对打包过程进行优化
一般情况下我们可以从优化代码的方面对项目进行优化,也可以使用类似cdn的方式对项目进行优化
脚手架中提供了一个命令,可以让我们看到项目的资源的分布(占用)情况:npm run build – --report
生成项目报告文件
npm run build – --report
打开报告页面
1.报告页面中,越大的块说明这个模板占用的体积越大
2.占用体积越越大的模块,我们要考虑不将其打包到产品中
cdn加速优化
cdn: CDN的本质上是将媒体资源,动静态图片(Flash),HTML,CSS,JS等等内容缓存到距离你更近的IDC,从而让用户进行共享资源,实现缩减站点间的响应时间等等需求,而网游加速器的本质则是通过建立高带宽机房,架设多节点服务器来为用户进行加速。
我们可以将一些大体积的模块,让cdn帮我们提供相应的资源,这样就可以缓解我们自己的服务器的压力,同时提供更快更好的资源响应
vue.config.js
在脚手架项目中,如果想增加自己的项目配置,可以在根目录下添加vue.config.js文件,在这个文件中实现自定义的配置
在打包的时候,这个配置会和脚手架的配置组合到一起
添加包的排除
module.exports = { configureWebpack: { externals:{ 'vue': 'Vue', 'element-ui': 'ELEMENT', 'quill': 'Quill' } }, }
可以看到,打包后的项目体积显著的减少,但是,问题并没有解决,由于没有这些包,打包后的项目并不能运行
这是因为,现在打包的项目中,已经没有Vue这个包了,所以才会出现错误,我们现在需要使用cdn的方式来提供这些资源
添加cdn的用户自定义
vue.config.js中加入下面代码
let cdn = { css: [ // element-ui css 'https://unpkg.com/element-ui/lib/theme-chalk/index.css',// 样式表 // 富文本框插件样式 'https://cdn.bootcdn.net/ajax/libs/quill/2.0.0-dev.4/quill.bubble.css' ], js: [ // vue must at first! 'https://unpkg.com/vue/dist/vue.js', // vuejs // element-ui js 'https://unpkg.com/element-ui/lib/index.js', // elementUI // 富文本框插件 'https://cdn.bootcdn.net/ajax/libs/quill/2.0.0-dev.4/quill.js' ] }
通过插件将资源自动的添加到页面中
挂载资源到插件
module.exports = { // 添加打包排除,说明以下配置中的包将来不会打包到项目中 configureWebpack: { externals:{ 'vue': 'Vue', 'element-ui': 'ELEMENT', 'quill': 'Quill' } }, // 将cdn的资源挂载到插件上 chainWebpack (config) { config.plugin('html').tap(args => { args[0].cdn = cdn return args }) } }
在页面中使用插件添加指定的cdn资源,在项目中的public中index中加入下面代码(项目打包前的index文件)
添加css引入(head结构中)
<% for(var css of htmlWebpackPlugin.options.cdn.css) { %> <link rel="stylesheet" href="<%=css%>" /> <% } %>
添加js引入(body结构中)
<% for(var js of htmlWebpackPlugin.options.cdn.js) { %> <script src="<%=js%>"></script> <% } %>
重新打包,OK
设置只有产品阶段才使用cdn
在项目开发的时候,其实没有必要使用cdn,这样反而会让我们的页面加载效率下降,同时也不适合本地开发(需要连网)
我们可以根据环境变量进行相应的处理,只有在产品的时候,才让插件去自动注入相应的资源文件到html页面
const isProd = process.env.NODE_ENV === 'production' // 是否生产环境 let externals = { 'vue': 'Vue', 'element-ui': 'ELEMENT', 'quill': 'Quill' } let cdn = { css: [ // element-ui css 'https://unpkg.com/element-ui/lib/theme-chalk/index.css',// 样式表 // 富文本框插件样式 'https://cdn.bootcdn.net/ajax/libs/quill/2.0.0-dev.4/quill.bubble.css' ], js: [ // vue must at first! 'https://unpkg.com/vue/dist/vue.js', // vuejs // element-ui js 'https://unpkg.com/element-ui/lib/index.js', // elementUI // 富文本框插件 'https://cdn.bootcdn.net/ajax/libs/quill/2.0.0-dev.4/quill.js' ] } cdn = isProd ? cdn : { css: [], js: [] } externals = isProd ? externals : {} module.exports = { // 添加打包排除,说明以下配置中的包将来不会打包到项目中 configureWebpack: { externals }, // chainWebpack (config) { config.plugin('html').tap(args => { args[0].cdn = cdn return args }) } }
到此这篇关于vue项目打包以及优化的实现步骤的文章就介绍到这了,更多相关vue项目打包以及优化内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
- vue项目引入element页面(vue-element-admin项目导入和导出的实现)
- vue怎么使用element(Vue Element前端应用开发之图标的维护和使用)
- vue项目上线教程(vue项目中使用骨架屏的方法)
- vue移动端项目用什么打包工具(浅谈使用Vue完成移动端apk项目)
- vue 如何执行动态js(如何利用vue.js实现拖放功能)
- 详解Vue3中Teleport的使用(详解Vue3中Teleport的使用)
- vue 优雅写法(使用vue实现手写签名功能)
- vue调用后台接口实现预览(vue实现集成腾讯TIM即时通讯)
- vue自定义列组件(vue自定义表格列的实现过程记录)
- vue统计代码行数(vue实现计数器简单制作)
- vue使用elementui框架(总结Vue Element UI使用中遇到的问题)
- vue引用js库报错(Vue插件报错:Vue.js is detected on this page.问题解决)
- vue怎么接收后台的数据(Vue封装全局toast组件的完整实例)
- vue如何检查数组变化(Vue2中无法检测到数组变动的原因及解决)
- vue项目部署到服务器的nginx(Nginx部署vue项目和配置代理的问题解析)
- vue控制div滚动条(vue3实现CSS无限无缝滚动效果)
- 深度 倒牛奶 这一幕为何又在美国上演(深度倒牛奶)
- 美国数十万加仑牛奶倒下水道怎么回事 原因曝光令人心痛(美国数十万加仑牛奶倒下水道怎么回事)
- 探索中国神秘文字(探索中国神秘文字)
- 重温《蜗居》 宋思明选中海藻为红颜知己,纯属巧合,与爱无关(宋思明选中海藻为红颜知己)
- 越南旅游攻略(越南旅游攻略自由行)
- 成都旅游攻略(成都旅游攻略自由行最佳线路)
热门推荐
- think php上传服务器(ThinkPHP5+UEditor图片上传到阿里云对象存储OSS功能示例)
- python3web编程基础教程(python初学者,用python实现基本的学生管理系统python3代码实例)
- sqlserver限制windows身份登录(解决sql server 数据库,sa用户被锁定的问题)
- sql中having用法(sql中的 where 、group by 和 having 用法解析)
- 常见伪静态规则(通过伪静态解决中文乱码问题)
- nginx配置访问接口(nginx网站服务如何配置防盗链推荐)
- MySQL定时任务(EVENT事件)如何配置详解(MySQL定时任务EVENT事件如何配置详解)
- svn代码冲突的解决
- python在txt指定行添加文本(Python修改文件往指定行插入内容的实例)
- phpstudy如何域名访问(phpStudy2016 配置多个域名期间遇到的问题小结)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9