在这一部分将项目打包上传,并且进行服务器部署

1. 什么是跨域

网页所在url的协议, 域名, 端口号, 和Ajax请求url的协议, 域名, 端口号有一个对应不上, 就发生跨域

三种解决跨域的方法

jsonp方式

  • 需要前端和后端同时支持

    前端用script+src属性, 发送函数名给后台, 同时准备好同名的函数, 准备接收数据

    后端返回的字符串一定用方法名(数据字符串)格式返回, 到script标签中执行

    调用函数名, 并传递数据

  • 例子代码(看看就行, 不用尝试)

    <script>function callBackFn(data){// data就是'{"a": 10, "b": 20}'}
    </script>
    <script src="http://后台接口地址?callback=callBackFn"></script>
    <!-- 后台接口返回 'callBackFn({"a": 10, "b": 20})' -->
    

cors方式

  • 前端什么也不用做

  • 后端需要开启cors

    实际上就是在响应头添加允许跨域的源

    Access-Control-Allow-Origin: 字段和值(意思就是允许去哪些源地址去请求这个服务器)

代理转发

  • 如果后端jsonp也不弄, cors也不弄, 就给你个接口地址

    我们可以在本地弄个服务器, 然后用服务器请求后台服务器接口地址

devServer: {proxy: {// http://c.m.163.com/nc/article/headline/T1348647853363/0-40.html'/api': { // 请求相对路径以/api开头的, 才会走这里的配置target: 'http://c.m.163.com', // 后台接口域名changeOrigin: true, // 改变请求来源(欺骗后台你的请求是从http://c.m.163.com)pathRewrite: {'^/api': '' // 因为真实路径中并没有/api这段, 所以要去掉这段才能拼接正确地址转发请求}}}}

2、项目打包

npm run serve 是启动开发环境的服务器 (编写代码过程查看效果用)
npm build 也是打包项目代码(但是会输出到dist文件夹下)
分析可以直接把webpack开发服务器部署到线上服务器, 但是不要那么干. 因为有热更新和转换代码的过程, 慢
建议让webpack打包出dist文件夹, 把dist静态文件夹发给后台/运维, 部署到公司服务器上
脚手架工程中运行

命令: npm run build

作用:用vue-cli内部集成的webpack,把.vue,.less.js 等打包成浏览器可直接执行的代码。

结果:会在项目根目录下创建 /dist目录,在这个目录下产出打包后的结果。

  1. app.hash值.js :主入口
  2. app.hash值.js.map: 记录当前的.js文件, 打包之前对应代码位置, 有利于代码出错快速找到源代码的位置。
  3. 模块名.hash值.js - 模块里写的js代码

component: () => import('../views/search/index.vue'),在打包时,就会生成对应的chunk片段文件

  1. chunk-vendors:第三方包的代码统一放在这里(dayjs,vue,vuex,vue-router,vant)-只要被webpack构建依赖关系发现的包
  2. chunk-hash值.js: 某个第三方模块对应的js ,某个.vue文件编译之后的.js。

运行

  1. 可以直接用vscode+liveserver插件运行静态网页index.html

    哇, 可怕的问题来了, 空白页, 悄悄打开控制, 发现全是路径引入报错

    仔细一看, 要的都是服务器根目录下的js / css文件夹里的打包的片段文件

  2. 原因: vscode+liveServer插件, 会把vscode打开的根目录当做服务器的根目录, 根目录下并没有js / css文件夹

    而且服务器也不会把你的dist里代码放到公司线上服务器根目录

解决

  1. 只需要让webpack打包时, 把路径弄成相对路径即可咯

    在vue.config.js, 第一次对象里添加配置

    publicPath: './'
    

注意出现空白页的问题

  1. 如果打包后F12出现路径404找不到的问题,
    解决方法:需要在vue.config.js下配置publicPath
// vue.config.js
const path = require('path')
module.exports = {publicPath: './' // 告诉webpack打包的index.html引入其他资源文件以./开头, 不要默认/开头
}
  1. 如果打开F12不报错,但却一片空白,可能使用了history模式

解决方法 把router下的history注释掉

const router = new VueRouter({// mode: 'history',base: process.env.BASE_URL,routes
})

打包的指令 npm run build

打包后的跨域问题
为什么打包之后没有发生跨域

  1. 打包后运行在http://localhost:5500

  2. ajax请求的是http://toutiao.itheima.net

    按道理来说, 应该跨域了啊

    但是, 后台开启了cors, 所以直接请求

注意

  1. 如果你的后台没开启cors, 你使用webpack开发服务器来做的代理转发

  2. 那么打包后, 与webpack开发服务器没关系了

    解决: 自己用node+express搭建一个本地服务器开启cors, 并启动

    把自己前端的请求基地址改成这个服务器一起部署到线上

3、项目打包_跨域问题

项目打包,当到真实的生产环境

跨域问题

打包后为什么不会跨域

  1. 打包后运行在http://localhost:5500

  2. ajax请求的是http://toutiao.itheima.net

    按道理来说, 应该跨域了啊

    但是, 后台开启了cors, 所以直接请求

注意

  1. 如果你的后台没开启cors, 你使用webpack开发服务器来做的代理转发,打包之后,与webpack没有关系

解决方法

  1. 自己用node+express搭建一个本地服务器开启cors, 并启动

  2. 把dist发送给后端,由于在同一个服务器上,不存在跨域问题

4、项目打包_分析-代码高亮

目标

  • 如何优化打包体积

打包结果分析

vuecli中提供一个打包分析的工具

命令: yarn build --report

它会在dist目录下产生一个report.html文件,其中就有对打包结果的分析说明


效果 - 帮助我们分析哪个包的体积过大(针对性优化)

例如只用到一个方法的moment / dayjs 可以删除不要, 换成原生js自己写

5、优化-代码高亮

  1. highlight.js体积过大, 可以让后台给代码标签设置好class类名给我返回

    现在的接口已经弄好了

  2. 所以把main.js, 这段代码删除掉, 我们只要引入对应样式即可

    // import hljs from 'highlight.js'
    import 'highlight.js/styles/default.css' // 代码高亮的样式//Vue.directive('highlight', function (el) { // 自定义一个代码高亮指令
    //  const highlight = el.querySelectorAll('pre, code') // 获取里面所有pre或者code标签
    //  highlight.forEach((block) => {//    hljs.highlightBlock(block) // 突出显示pre和code内标签, 并自动识别语言, 添加类名和样式
    //  })
    //})
    
  3. 千万不要忘了, 去文章详情, 把使用的指令删除掉

  4. 但是后台没有提前设置类名的pre和code标签就没有了高亮

  5. aid=7997 这个文章提前设置了类名, 所以还是ok的

  6. 再次打包观察体积

    分析包的体积,如果体积比较大,可以换另一个工具包

6、项目打包_分析优化-moment

  • moment就用了一个格式化时间

解决

  1. 所以我们只用了其中一个功能, 但是webpack把整个包都打包进dist下了

  2. 所以我们可以自己用原生js实现, 格式化时间, 卸载moment包

    yarn remove moment

// 时间选择
async confirmFn () {// console.log(this.currentDate instanceof Date)// this.currentDate里值是日期对象// 但是后台要"年-月-日"格式字符串参数值console.log(this.currentDate)const year = this.currentDate.getFullYear()let month = this.currentDate.getMonth() + 1let day = this.currentDate.getDate()month = month < 10 ? '0' + month : monthday = day < 10 ? '0' + day : dayconst dateStr = `${year}-${month}-${day}`await updateProfileAPI({birthday: dateStr})// 前端页面同步this.profile.birthday = dateStr// 时间选择器关闭this.isShowBirth = false
}

再次打包观察dist文件夹体积大小

观察报告, 最大的就是vue源码了, 那就没什么可以优化的了

7、项目打包_优化-去掉打印

  • 上线后想让所有打印失效
  1. 如果自己删除, 那开发还得加回来, 注释也一样啊, 麻烦
  2. 能否配置环境变量, 让代码自己来判断呢
  3. 先在项目 根目录下配置文件(脚手架环境变量)
  • 在.env.development (开发环境变量)

    NODE_ENV 变量名随便起, 值不用加引号就是字符串了

    NODE_ENV=development
    
  • 在.env.production (生产上线环境变量)

    NODE_ENV=production
    
  1. 在main.js里加入如下配置
if (process.env.NODE_ENV !== 'development') { // process是Node环境全部变量, 运行时根据敲击的命令不同, 脚手架会取环境变量给env添加属性和值console.log = function () {}console.error = function(){}console.dir = function(){}
}

结束

(十)打包和项目部署相关推荐

  1. angular项目打包_vue项目部署的最佳实践

    前言 使用vue.react.angular等技术开发过程中,我们都会遇到以下问题: 首屏加载慢 每一次更新都需要清除浏览器缓存才能看到效果(经常被测试吐槽) 这两个问题可以从很多方面进行优化,今天我 ...

  2. vue打包部署到php,打包vue项目部署在nginx

    因为liunx操作命令不是很熟,我整的是宝塔面板部署哈 首先在本地打包vue项目,打包成功后,项目中会多出一个dist 文件夹 把dist上传到服务器 配置nginx配置文件,新建一个othercon ...

  3. 百战商城(十二)-项目部署

    一.项目部署概述 1.项目部署, 项目开发结束, 测试通过, 将项目分别部署到指定服务器的过程. 2.分布式项目, 多个模块构成完整的项目. 多个模块可以分别部署到不同的服务器上. 不同服务器的访问地 ...

  4. 十二. 实战——项目部署(springboot 和 微服务)

    一. 如何运行jar包? https://www.cnblogs.com/godzzz/p/16358783.html 这个文章真好!!! Linux 运行jar包命令如下: 1. 方式一: java ...

  5. Vue项目部署及使用WebStorm开发Vue

    Vue项目部署及使用WebStorm开发Vue Vue项目部署 搭建Vue环境 新建Vue项目 使用WebStorm开发Vue WebStorm相关配置 配置路由 全局页面App.vue 全局引入组件 ...

  6. 服务器项目部署总结(超详细)

    系列文章目录 Linux操作系统笔记[超详细] 本篇文章主要从准备篇.项目开发.项目打包.项目部署四个部分去介绍如何把前后端分离的项目部署到阿里云服务器,在服务器上去玩自己的项目. 项目最终效果图:输 ...

  7. Angular项目打包到nginx部署过程

    Angular项目打包到nginx部署过程 一. 打包Angluar ng build,会在项目文件夹下生成dist文件,里面是打包后的文件 二. 部署nginx 在nginx官网中下载nginx 把 ...

  8. UE4打包项目部署到Quest遇到的问题

    UE4打包android项目时的环境设置在4.24是个分水岭.官方给出了为虚幻4.25和更高版本设置Android开发环境的方法.如果你直接用4.24之后的版本打包,从没有用早期版本打包,可能不会遇到 ...

  9. IDEA集成Docker插件实现项目打包镜像一键部署与Docker CA加密认证

    IDEA集成Docker插件实现项目打包镜像一键部署与Docker CA加密认证 Docker开启远程访问 修改该Docker服务文件 加载配置与重启 验证是否开启成功 IDEA配置docker 编写 ...

最新文章

  1. JSP内置对象-application
  2. 2009-ISIS命令与配置实验手册(可下载)
  3. js倒计时代码最简单的_32个史上最有用的js代码
  4. java计算器布局设计_用java设计一个计算器界面???
  5. 敏捷开发中asp.net MVC的开发次序感受(先开发View?先开发Model?先开发Controller!)...
  6. 基于依存句法规则的篇章级情感分析demo
  7. 正经人一辈子都用不到的 JavaScript 方法总结 (二)
  8. 利用.jou文件将建筑shp文件导入Gambit方法
  9. pdf虚拟打印机怎么用来转换文件
  10. 考PRINCE2有用么?
  11. linux系统安装wine关关采集,在Ubuntu 20.04系统上安装和使用Wine 5的方法
  12. 操作系统名词中英文对照(一)
  13. windows系统的包管理器【choco】
  14. 基于生物特征信息的身份识别(指纹、面部识别的方式和原理)的使用问题的思考
  15. android手机如何设置提高网速,安卓手机网速慢怎么办 安卓手机网速慢解决办法【详解】...
  16. 安装angular ng-alain
  17. 拒了阿里offer,HR表示诧异,网友:这是你职业生涯的巅峰了
  18. 如何安装PyTorch
  19. 创建学生类Student,其属性描述包括ID(编号)、Name(姓名)、SClass(班级)、CScore(语文成绩);创建教师类Teacher,其属性描述包括ID(编号)、Name(姓名)、JobT
  20. vue本地存储案例_本地化还是创意适应? 流氓游戏街的案例研究

热门文章

  1. 【蓝桥杯】 次数差:x 星球有 26 只球队,分别用 a ~ z 的 26 个字母代表。他们总是不停地比赛。 在某一赛段,哪个球队获胜了,就记录下代表它的字母,这样就形成一个长长的串。 国王...
  2. 一键 为 Win7 安装盘 注入 USB 3.0驱动
  3. 瞻博网络持续深耕 以“本土化”撬动“中国心”
  4. 24只胡萝卜的管理精神(节录)
  5. android 5.0 wifi移植,android  wifi移植
  6. 全球及中国等离子电视行业市场销售量调研及未来发展展望报告2022-2027年
  7. 【计算机网络】知识梳理(二)物理层
  8. STM32程序下载2:通过STM32CubePro-ST-Link下载
  9. 在线问诊小程序|互联网医院系统好处有哪些?
  10. 百度自然语言接口调用