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

这篇具有很好参考价值的文章主要介绍了vue cli 打包、生产环境http-proxy-middleware代理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

结构树

vue cli 打包、生产环境http-proxy-middleware代理,vue,vue.js,http,前端

版本

vue cli 打包、生产环境http-proxy-middleware代理,vue,vue.js,http,前端

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方法重写url
        pathRewrite: {
          '^/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:超时时间(毫秒)当代理接收不到目标服务器的返回
 文章来源地址https://www.toymoban.com/news/detail-708986.html

到了这里,关于vue cli 打包、生产环境http-proxy-middleware代理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue-cli4 配置不同开发环境打包命令

    为什么会需要配置多种环境变量? 在一个产品的开发过程中,一般来说都是会经历这么一个过程: 本地开发 → 测试版部署 → 测试 → 预上线 → 正式上线 。对应的每一个环节中的服务器地址,接口地址...都会不一样。那么我们需要怎么去处理这种情况。 #1. 创建文件 在

    2024年02月16日
    浏览(54)
  • Vue3 开发环境和生产环境打包配置

    Vue3打包环境配置 工作中通常开发环境和正式环境使用的请求地址是不同的 ,大多数的做法是手动更改请求地址,但是手动的去更改导致错误的几率会更大,所以vue-cli3提供了 ‘环境变量与模式’ (模式和环境变量 | Vue CLI),通过这个方法我们可以通过命令的方式更改请求

    2023年04月17日
    浏览(58)
  • Vue项目打包问题(生产环境样式失效)

    在公司项目发布上线后,出现了部分样式失效的问题。我们引用的是vuetify第三方库,经过检查,发现是部分样式被vuetify自带的css样式给覆盖,原因是生成环境的打包模式与开发环境不同。 生产模式(env.prod) 在 生产模式 下打包,项目会被最小化,所有的css代码会被提取出

    2024年02月11日
    浏览(82)
  • vue3之vite创建h5项目1(创建vite项目、配置IP访问项目、配置多环境变量与预览打包生产效果、配置别名)

    初始化项目模块 添加环境变量文件,每个文件写入配置,定义 env 环境变量前面必须加 VITE_ dev环境 test环境 prod环境 在项目根目录下创建 03-1:配置多环境变量之dev环境 .env.development 03-2:配置多环境变量之test环境 .env.test 03-3:配置多环境变量之prod环境 .env.production 03-4 修改

    2024年02月02日
    浏览(53)
  • web前端开发项目走proxy代理后端接口,构建发布到生产等环境后,如何修改api接口

    在开发环境,因为本地站点和接口站点不是同一个域名,就产生了跨域问题,但是不可能让后端开发跨域端口或使用 jsonp ,所以,一般是让前端通过在 webpack.config.js 中配置 proxy 来走接口代理。 代码如下: 这样,就将本地域名代理到接口了。 构建成 dist目录 后,就不能修改

    2024年02月15日
    浏览(36)
  • webpack/vue-cli构建速度和打包体积优化

    webpack-bundle-analyzer 可以生成代码分析报告,可以直观地分析打包出的文件有哪些,及它们的大小、占比情况、各文件 Gzipped 后的大小、模块包含关系、依赖项等 npm i -D webpackbar webpack-bundle-analyzer javascript 复制代码 const { BundleAnalyzerPlugin } = require(\\\'webpack-bundle-analyzer\\\'); ​ module.e

    2024年01月19日
    浏览(43)
  • vue2、vue-cli4以及vue3、vite打包去掉console.log

    webpack4会自带terser-webpack-plugin插件。 vue.config.js文件 vue-cli chainwebpack配置 webpack 配置terser chain链式配置 vite.config.ts文件 Esbuild#drop:For example, you can mark console.log as pure using --pure:console.log. This will cause these API calls to be removed safely when minification is enabled. Vite esbuild配置 esbuild prue配置

    2024年02月10日
    浏览(60)
  • vue3配置代理--[vite] http proxy error

    跨域请求数据, 浏览器 同源策略的保护机制, 通过 proxy 实现跨域请求数据; 如果直接 postman 请求是不会报错的, vue3 报错是因为经过浏览器了, 数据其实返回了, 但是别浏览器的同源策略屏蔽了。 本地调试, 后端使用** http://localhost:8081 作为接口地址, 报错 [vite] http proxy error ** 可

    2024年02月08日
    浏览(50)
  • Webstorm+Nodejs+webpack+vue-cli+Git搭建vue环境

    此笔记归纳整理webstorm搭建vue项目,仅作记录使用。   因为版权问题,就不再细说了。   选择nvm的安装路径:   选择node的安装路径:    Win键+R键 ,输入cmd,然后回车,打开命令行界面   进入命令提示符窗口,输入以下命令,显示版本号,则安装成功。   在

    2024年02月15日
    浏览(67)
  • 在vite或者vue-cli中使用.env[mode]环境变量

    在项目中总会遇到一些默认的配置,需要我们配置到静态文件中方便我们去获取,这时候就可以用到这个.env环境变量文件,在cli创建的项目中顶层的nodejs会有一个process对象,这个对象可以根据不同的环境获取不同的环境配置文件,但是vite中获取变量的方式不一样。 创建变量文件

    2024年02月06日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包