vue cli 打包、生产环境http-proxy-middleware代理

结构树

版本

1、创建vue.config.js

const path = require('path');
const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
//压缩
const CompressionWebpackPlugin = require('compression-webpack-plugin')
const isProduction = process.env.NODE_ENV !== 'development';module.exports = {// 将 examples 目录添加为新的页面pages: {index: {// page 的入口entry: process.env.NODE_ENV === 'production' ? 'src/main-prod.js' : 'src/main.js',// 模板来源template: 'public/index.html',// 输出文件名filename: 'index.html'}},runtimeCompiler: true,publicPath: "./", // 官方要求修改路径在这里做更改,默认是根目录下,可以自行配置outputDir: 'dist', //标识是打包哪个文件productionSourceMap: false,configureWebpack: config => {if (isProduction) {//移除代码中的打印config.plugins.push(new UglifyJsPlugin({uglifyOptions: {output: {comments: false, // 去掉注释},warnings: false,compress: {drop_console: true,drop_debugger: false,pure_funcs: ['console.log']//移除console}}}))//压缩大于200k的文件config.plugins.push(new CompressionWebpackPlugin({filename: '[path][base].gz',algorithm: 'gzip',// test: /\.js$|\.html$|\.json$|\.css/,test: /\.js$|\.json$|\.css/,threshold: 204800, // 只有大小大于该值的资源会被处理minRatio: 0.8, // 只有压缩率小于这个值的资源才会被处理// deleteOriginalAssets: true // 删除原文件}))}console.log("------------------------------" + isProduction)},chainWebpack: config => {// 发布模式 优化首次加载 采用本地cdn(若需要更多优化可自行添加)config.when(process.env.NODE_ENV === 'production', config => {config.set('externals', {axios: 'axios','vue-router': 'VueRouter',})})},devServer: {proxy: {'/config': {target: 'http://xxx.xxx.xx.xxx:xxx',//代理地址,这里设置的地址会代替axios中设置的baseURL//changeOrigin: true,// 如果接口跨域,需要进行这个参数配置//ws: true, // proxy websockets//pathRewrite方法重写urlpathRewrite: {'^/config': '/config'//pathRewrite: {'^/api': '/'} 重写之后url为 //pathRewrite: {'^/api': '/api'} 重写之后url为 /api/xxxx}}, '/guacamole': {target: 'ws://xxx.xxx.xx.xxx:xxx',pathRewrite: {'^/guacamole': '/guacamole'}},}},css: {loaderOptions: {less: {lessOptions: {modifyVars: {},javascriptEnabled: true,},},},},
}

如果采用了本地cdn则index.html

  <!-- 使用CDN的CSS文件 --><% if (process.env.NODE_ENV==='production' ) { %><script src="./static/axios.0.21.1.min.js"></script><script src="./static/vue-router.min.js"></script><% } %>

2、创建ecosystem.config.js

module.exports = {apps: [{// 测试环境name: "test",script: "himdcs.js",env: {"NODE_ENV": "test"}}]
}

3、创建himdcs.js


const express = require('express'); //npm下载并引入express模块 npm -express -D
const proxy = require('http-proxy-middleware');// 导入压缩包
const compression = require('compression');
const cors = require('cors');const app = express();
app.use(cors())// 启用中间件 要写在静态资源托管之前 用于静态文件压缩包app.use(compression());
app.use(express.static('./dist')) // ./dist 为vue打包后dist文件夹的路径app.listen(1897,function(err){  //8080 想要监听项目的端口号if(err){console.log(err)}else {console.log('项目启动成功')}
})
//用于服务部署时的代理
app.use(['*/config/*'],proxy.createProxyMiddleware({target:'http://xxx.xxx.xx.xxx:xxxx', // 服务器api地址目录changeOrigin: true,secure: false,xfwd:true,//添加x-forward请求头pathRewrite: {'/config': '/config'     // rewrite path}
}));//websocket
app.use(['/beat'],proxy.createProxyMiddleware({target:'ws://xxx.xxx.xx.xxx:xxxx', // 服务器api地址目录changeOrigin: true,ws: true,xfwd:true,pathRewrite: {'/beat': '/beat'     // rewrite path}
}));

4、修改package.json

{"name": "","version": "3.0.0","private": true,"scripts": {"dev": "vue-cli-service serve --mode development","prod": "vue-cli-service build --mode production","serve": "vue-cli-service serve","build": "vue-cli-service build --mode production","lint": "vue-cli-service lint"},"dependencies": {...}
...
}

5、部署到docker

FROM keymetrics/pm2:latest-alpine# Bundle APP files
RUN mkdir -p /home/
WORKDIR /home/
#COPY src src/
#COPY package.json .
COPY . /home/# Install app dependencies
ENV NPM_CONFIG_LOGLEVEL warn
# Show current folder structure in logs
#RUN ls -al -R
CMD pm2-docker start ecosystem.config.js --only $NODE_ENV --watch

6、http-proxy-middleware参数说明

option.target:url字符串将与url模块解析
option.forward:url字符串将与url模块解析
option.target:传递给http(s)请求的对象(参阅Node https代理和http代理对象)
option.ssl:传递给https.createServer()的对象
option.ws:true / false,如果你想要代理websockets
option.xfwd:true / false,添加x-forward请求头
option.secure:true / false,如果你想要验证SSL证书
option.toProxy:true / false,将绝对URL作为​​path​​(对代理使用代理时很有用)
option.prependPath:true / false,默认:true-指定是否要将目标的路径预置到代理路径
option.ignorePath:true / false,默认:false-指定是否要忽略传入请求的代理路径(注意:如果需要,您将必须附加/手动)。
option.localAddress:用于传出连接的本地接口字符串
option.changeOrigin:true / false,默认值:false - 将主机头的源更改为目标URL
option.auth:基本认证,即“用户:密码”来计算授权头。
option.hostRewrite:重写(301/302/307/308)重定向的位置主机名。
option.autoRewrite:根据请求的主机/端口重写(301/302/307/308)重定向的位置主机/端口。默认值:false。
option.protocolRewrite:重写位置协议(301/302/307/308)重定向到’http’或’https’。默认值:null。
option.cookieDomainRewrite:重写set-cookie标头的域。可能的值:
-​​​false​​​(默认):禁止重写​​cookie​​​
- 字符串:新域名,比如说​​​cookieDomainRewrite:"new.domain"​​​。使用​​cookieDomainRewrite:""​​​删除域名。
- 对象:域名到新域名的映射,用”*”匹配所有域名。
举个栗子:保持一个域名不变,重写一个域名并且删除其他的:
​​
cookieDomainRewrite: {
"unchanged.domain": "unchanged.domain",
"old.domain": "new.domain",
"*": ""
}

option.headers:对象,添加请求头。(比如:​​{host:'www.example.org'}​​)
option.proxyTimeout:超时时间(毫秒)当代理接收不到目标服务器的返回
 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MyBatis基础之概念简介

文章目录 基本概念1. 关于 MyBatis2. MyBatis 的体系结构3. 使用 XML 构建 SqlSessionFactory4. SqlSession5. 默认的别名6. 补充 [注意] 放前面前 很多人可能在使用 MyBatis-plus 进行代码开发&#xff0c;MyBatis的这部分内容是用来更好的讲述之后的内容。 基本概念 1. 关于…

线性回归方程

性回归是利用数理统计中的回归分析来确定两种或两种以上变数间相互依赖的定量关系的一种统计分析方法&#xff0c;是变量间的相关关系中最重要的一部分&#xff0c;主要考查概率与统计知识&#xff0c;考察学生的阅读能力、数据处理能力及运算能力&#xff0c;题目难度中等&…

导出excel单元格时实现换行

上一篇&#xff1a;laravel中安装Maatwebsite/excel扩展 承接上一篇哈&#xff0c;laravel成功安装了excel的扩展&#xff0c;但是有个小的问题&#xff0c;就是每个题目有至少两个选项&#xff0c;导出到excel的时候&#xff0c;希望每个选项之间能换行展示&#xff0c;也就是…

vue中转换base64文件数据后通过blob下载

可以看到这里我要转换的数据是content字段&#xff0c;即将base64文件数据转换后下载下来&#xff1a; downloadAttachment({ attachmentId: id }).then(({ data }) > {proxy.$modal.closeLoading();// atob先解码base64数据const raw window.atob(data.content);// 获取解…

移除数组中指定元素的所有数

给你一个数组 nums 和一个值 val&#xff0c;你需要 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 思路1&#xff1a;暴力查找——覆盖法&#xff0c;遇到一次val就挪动后面的数据删除 代码 int removeElement(int* nums, int numsSize, int val) {int…

莫比乌斯召回系统介绍

当前召回系统只能召回相关性高的广告&#xff0c;但不能保证该广告变现能力强。莫比乌斯做了如下两点创新&#xff1a; 在召回阶段&#xff0c;引入CPM等业务指标作为召回依据在召回阶段&#xff0c;引入CTR模型&#xff0c;从而召回更多相关性高且变现能力强的广告 参考 百度…

国家信息中心举办“数字政府建设暨数字安全技术”研讨会:海云安提出数字政府软件供应链安全解决方案

近日&#xff0c;由国家信息中心主办&#xff0c;复旦大学研究院承办的“数字政府建设暨数字安全技术研讨会”在义乌顺利召开。国家信息中心信息与网络安全部副主任禄凯&#xff0c;复旦大学党委常委、宣传部部长陈玉刚&#xff0c;义乌市委常委、常务副市长喻新贵为会议致辞。…

AI绘画:StableDiffusion实操教程-斗罗大陆-朱竹清(附高清图下载)

大家好&#xff0c;我是小梦&#xff0c;最近一直研究AI绘画。 不久前&#xff0c;我与大家分享了StableDiffusion的全面教程 然而&#xff0c;仍有些读者提出&#xff0c;虽然他们已经成功地安装了此工具&#xff0c;但生成的作品与我展示的相差较大。那么&#xff0c;如何缩…

linux编译curl库(支持https)

openssl下载和编译 https://www.openssl.org/source/old/ 解压 tar -xvf openssl-3.0.1.tar.gz cd openssl-3.0.1/配置 ./config如果是编译静态库加入 -fPIC no-shared 如果指定安装路径,使用 --prefix=/usr/local/openssl/选项指定特定目录 编译和安装 make sodu make i…

Python 内置函数详解 (2) 逻辑运算

近期在外旅游,本篇是出发编辑的,准备定时发布用,不完整,旅游回来后再补充。 Python 内置函数 Python3.11共有75个内置函数,其来历和分类请参考:Python 新版本有75个内置函数,你不会不知道吧_Hann Yang的博客-CSDN博客https://blog.csdn.net/boysoft2002/article/detai…

核心实验18_ospf高级_ENSP

项目场景&#xff1a; 核心实验18_ospf高级_ENSP 多区域虚链路 实搭拓扑图&#xff1a; 具体操作&#xff1a; R1: [R1]ospf 1 router-id 1.1.1.1 [R1-ospf-1]area 0 [R1-ospf-1-area-0.0.0.0]net 1.1.1.0 0.0.0.255 [R1-ospf-1-area-0.0.0.0]net 10.1.12.0 0.0.0.255 [R1-os…

【每日一题】73. 矩阵置零

73. 矩阵置零 - 力扣&#xff08;LeetCode&#xff09; 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,1,1],[1,0,1],[1,1,1]] 输出&#xff1a;[…