Vue项目的打包上线步骤

Vue项目的打包上线步骤

  • 一、打包之前的路由模式
  • 二、性能分析和CDN的应用
    • 2.1 性能分析
    • 2.2 webpack排除打包
    • 2.3 CDN文件配置
    • 2.4 注入CDN文件到模板

一、打包之前的路由模式

两种路由模式

  • hash模式 : #后面是路由路径,特点是前端访问,#后面的变化不会经过服务器
  • history模式:正常的/访问模式,特点是后端访问,任意地址的变化都会访问服务器

改成history模式

  • src/router/index.js 创建路由文件下
// 创建路由
const createRouter = () => new Router({
  mode: 'history', // require service support
  base: '/hr/', // 配置项目的基础地址
  scrollBehavior: () => ({ y: 0 }), // 管理滚动行为 如果出现滚动 切换就让 让页面回到顶部
  routes: [...constantRoutes] // 临时合并所有的路由
})
  • 此时路径地址改成
    在这里插入图片描述

二、性能分析和CDN的应用

2.1 性能分析

  • 使用vue-cli本身提供的性能分析工具,对我们开发的所有功能进行打包分析
  • 1.安装依赖 npm run preview -- --report
  • 2.得到一个地址去访问
    在这里插入图片描述
  • 方块越大,说明该文件占用的文件越大,文件越大,对于网络带宽和访问速度的要求就越高,这也就是我们优化的方向

2.2 webpack排除打包

  • 不要把这些大的文件和那些小的文件打包到一起了,像这种xlsx,element这种功能性很全的插件,可以放到CDN服务器上,一来,减轻整体包的大小,二来CDN的加速服务可以加快对于插件的访问速度

使用方式

  • 1.vue.config.js的configureWebpack选项
 // 排除 elementUI xlsx  和 vue 
  externals:
      {
        'vue': 'Vue',
        'element-ui': 'ELEMENT',
        'xlsx': 'XLSX'
     }

2.3 CDN文件配置

上边有几个大文件被排除打包了,需要采用采用CDN的方式,在页面模板中预先引入

  • vue.config.js
const cdn = {
  css: [
    // element-ui css
    'https://unpkg.com/element-ui/lib/theme-chalk/index.css' // 样式表
  ],
  js: [
    // vue must at first!
    'https://unpkg.com/vue@2.6.10/dist/vue.js', // vuejs
    // element-ui js
    'https://unpkg.com/element-ui/lib/index.js', // elementUI
      'https://cdn.jsdelivr.net/npm/xlsx@0.16.6/dist/jszip.min.js',
    'https://cdn.jsdelivr.net/npm/xlsx@0.16.6/dist/xlsx.full.min.js'
  ]
}

根据环境变量判断是开发环境 还是生产环境 开发环境下没有必要使用CDN 只在生产环境下生效

  • vue.config.js
et cdn = { css: [], js: [] }
// 通过环境变量 来区分是否使用cdn 
const isProd = process.env.NODE_ENV === 'production' // 判断是否是生产环境
let externals = {}
if (isProd) {
  // 如果是生产环境 就排除打包 否则不排除
  externals = {
    // key(包名) / value(这个值 是 需要在CDN中获取js, 相当于 获取的js中 的该包的全局的对象的名字)
    'vue': 'Vue', // 后面的名字不能随便起 应该是 js中的全局对象名
    'element-ui': 'ELEMENT', // 都是js中全局定义的
    'xlsx': 'XLSX' // 都是js中全局定义的
  }
  cdn = {
    css: [
      'https://unpkg.com/element-ui/lib/theme-chalk/index.css' // 提前引入elementUI样式
    ], // 放置css文件目录
    js: [
      'https://unpkg.com/vue@2.6.10/dist/vue.js', // vuejs
      'https://unpkg.com/element-ui/lib/index.js', // element
      'https://cdn.jsdelivr.net/npm/xlsx@0.16.6/dist/xlsx.full.min.js', // xlsx 相关
      'https://cdn.jsdelivr.net/npm/xlsx@0.16.6/dist/jszip.min.js' // xlsx 相关
    ] // 放置js文件目录
  }
}

module.exports = {
	configureWebpack: {
    // provide the app's title in webpack's name field, so that
    // it can be accessed in index.html to inject the correct title.
    name: name,
    resolve: {
      alias: {
        '@': resolve('src')
      }
    },
    // 排除 elementUI xlsx  和 vue 包名(不去打包)
    externals: externals
  },
}

2.4 注入CDN文件到模板

之后通过 html-webpack-plugin注入到 index.html之中

  • 找到vue.config.js里面的chainWebpack节点,添加如下代码
config.plugin('html').tap(args => {
  args[0].cdn = cdn
  return args
})
  • 找到 public/index.html。通过你配置的CDN Config 依次注入 css 和 js
<head>
  <!-- 引入样式 -->
  <% for(var css of htmlWebpackPlugin.options.cdn.css) { %>
    <link rel="stylesheet" href="<%=css%>">
  <% } %>
</head>

<!-- 引入JS -->
<% for(var js of htmlWebpackPlugin.options.cdn.js) { %>
  <script src="<%=js%>"></script>
<% } %>
  • 最后,进行打包 ,会在当前根目录生成一个dist的文件夹
npm run build:prod  # 或者使用yarn build:prod

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.kler.cn/a/5149.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[架构之路-144]-《软考-系统分析师》- 7-企业信息化战略与实施-1-概念、方法、与企业战略/IT战略/业务重组的关系

前言&#xff1a;所谓系统&#xff0c;系统是由相互作用相互依赖的若干组成部分结合而成的&#xff0c;具有特定功能的有机整体&#xff0c;而且这个有机整体又是它从属的更大系统的组成部分。任何现实世界的一定的活动范围&#xff0c;都是系统&#xff0c;任何计算机组成的软…

泰克示波器校准失败

全球每10位工程师中就有8位信赖泰克示波器&#xff0c;帮助他们诊断和测试明天的设计&#xff0c;泰克拥有全部的示波器系列&#xff0c;丰富的产品功能&#xff0c;广泛的分析功能&#xff0c;然而示波器会随着使用年限、使用频率以及操作等出现各种各样的问题&#xff0c;那么…

【深入理解二叉树OJ题】

文章目录一、单值二叉树二、二叉树最大深度三、翻转二叉树四、检查两棵树是否相同五、对称二叉树六、二叉树遍历一、单值二叉树 航班直达&#xff01; 前序遍历的思想。 思路&#xff1a;先判断左右节点是否存在&#xff0c;再判断根分别和左右节点的值是 否相等。 1.如果左…

智联物联分享之物联网协议MQTT简述,MQTT协议特点

接触过物联网设备的朋友们对于MQTT应该都不陌生吧&#xff0c;那MQTT是什么呢&#xff1f;智联物联小编为大家分享下MQTT的简述与特点。 MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;基于客户端/服务器的信息发布/订阅的物联网常用传输协议。1999年由开发…

今年面试好激烈!

金三银四过去一半&#xff0c;市场火热&#xff0c;但是大家就业压力却没有缓解多少。 很多粉丝后台留言&#xff0c;Java程序员面临的竞争太激烈了…… 我自己也有实感&#xff0c;多年身处一线互联网公司&#xff0c;虽没有直面过求职跳槽的残酷&#xff0c;但经常担任技术面…

主成分分析(PCA)原理

主成分分析&#xff08;PCA&#xff09;原理 在高维数据处理中&#xff0c;为了简化计算量以及储存空间&#xff0c;需要对这些高维数据进行一定程度上的降维&#xff0c;并尽量保证数据的不失真。PCA和ICA是两种常用的降维方法。 PCA&#xff1a;principal component analysi…

计算机软件著作权登记申请流程和需要的时间

计算机软件著作权登记申请流程主要包含&#xff1a; 1、系统网页登记 官网 中国版权保护中心 —我要登记&#xff08;软件登记&#xff09;—计算机软件著作权登记申请—登陆机构账号—开始填写信息登记。如果著作权人是个人点击个人&#xff0c;如果著作人是单位点击机构。 网…

天狗实战SpringBoot+Vue(二)项目结构搭建(上)

本文目录 前言一、创建Maven项目二、三层架构说明三、搭建三层架构1. 创建父子Maven项目2. 定义依赖关系2.1 父项目统一管理依赖2.2 子项目增加依赖四、常见问题QA1. JDK问题2. Maven问题最后前言 因为可能还有很多同学还不清楚上下文,所以简单介绍一下这个专栏要做的事: 天…

离线GPU服务器配置虚拟环境

给linux服务器安装Anaconda 按理说&#xff0c;应该装miniconda,原因如下 anaconda 是包含常用包的版本&#xff0c;miniconda 是精简版&#xff0c;推荐使用 miniconda。Anaconda同时打包了1500个常用的软件包, 可以一次性安装到你到python环境中, 这样你就不用再一个个安装软…

日入500+的程序员都在用的“接私活”平台

网上总说程序员的薪资很高&#xff0c;这我可就不同意了&#xff1a; 程序员的薪资哪里是很高&#xff0c;而是非常高&#xff01;而会接私活的程序员更是能拿到更高的收入&#xff01;作为一个程序员&#xff0c;这些接私活的网站一定要收藏起来&#xff0c;让你在“八小时外…

Excel使用技巧:如何打印指定区域?如何设置禁止打印?

我们在打印Excel表格的时候&#xff0c;有时候只需要打印部分内容&#xff0c;那如何设置Excel打印选定的区域呢&#xff1f;如果不想他人随意打印表格&#xff0c;又该如何设置呢&#xff1f;下面小编就来分享一下设置的方法。 Excel打印指定区域&#xff08;方法一&#xff0…

华为路由器 高级ACL配置

高级ACL 与基本ACL相比&#xff0c;高级ACL提供了更准确、丰富、灵活的规则定义方法。比如根据源IP地址、目的IP地址、IP协议类型、TCP源/目的端口、UDP源/目的端口号、分片信息和生效时间段等信息来定义规则&#xff0c;对IPv4报文进行过滤。 高级 ACL 接口调用方向的建议 …

图解Redis,Redis主从复制与Redis哨兵机制

目录专栏导读一、Redis复制是什么&#xff1f;二、Redis复制能干嘛&#xff1f;三、Redis复制的缺点1、复制延迟2、master宕机四、乐观复制策略五、Redis复制常用命令1、info replication2、replicaof 主库Ip 主库port3、slaveof 主库IP 主库port4、slaveof no one六、Redis复制…

centos 7安装mysql

今天在centos 7上安装mysql数据库&#xff0c;遇到了些问题以及解决方法&#xff0c;记录一下。1、下载mysql安装包wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm出现跟上面界面这样子&#xff0c;说明是ok的了&#xff0c;接下来&#xf…

盒子拖拽效果,原生js实现

原生js实现拖拽效果 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevic…

【Linux内网穿透】使用SFTP工具快速实现内网穿透

文章目录内网穿透简介1. 查看地址2.局域网测试连接3.创建tcp隧道3.1. 安装cpolar4.远程访问5.固定TCP地址内网穿透简介 是一种通过公网将内网服务暴露出来的技术&#xff0c;可以使得内网服务可以被外网访问。以下是内网穿透的一些应用&#xff1a; 远程控制&#xff1a;通过内…

【C语言】文件操作

这里写目录标题文件1.文件的打开和关闭2.文件操作函数1.字符操作函数2.文本行操作函数3.格式化输入输出4.二进制输入输出5.文件的随机读写fseekftellrewind3.文本文件和二进制文件4.文件读取结束的判定5.文件缓冲区文件 使用文件可以将数据直接存放再电脑的硬盘上&#xff0c;…

yolov5模型训练流程

yolov5简介 YOLOv5(You Only Look Once)是由 UitralyticsLLC公司发布的一种单阶段目标检测算 法&#xff0c;YOLOv5 相比YOLOv4 而言&#xff0c;在检测平均精度降低不多的基础上&#xff0c;具有均值权重文件更小&#xff0c;训练时间和推理速度更短的特点。YOLOv5 的网络结构…

11 容器常用命令

查看当前正在运行的容器有哪些&#xff1f; docker ps [options] exit &#xff1a;推出容器并停止 ctrl p q : 推出&#xff0c;但是容器还是运行 docker start id : 启动容器 docker restart id: 重启容器 docker stop id/name: 通过id或者name去停止容器 docker kill…

*(void**)解析——如何设计可以在32位下访问到内存区域的前4个字节,在64位下访问到前8个字节?

文章目录\*(int*)\*(void**)把*(void**)设计成函数&#xff0c;方便调用最近在写项目的时候遇到这样一个场景&#xff1a;需要管理多个空闲的内存块&#xff0c;把它们以链表的形式连接起来&#xff0c;那就需要在内存块的头4个字节&#xff08;32位下&#xff09;存放下一个内…
最新文章