zoukankan      html  css  js  c++  java
  • 学习一下webpack中devServer.proxy的配置

    在实际开发过程中,我们经常遇到跨域的问题,一般我们都会让后端设置一下允许跨域就可以了,但其实我们自己也是可以弄的。

    现在的项目用vue写的多一点,vue-cli脚手架搭建也比较方便,脚手架搭建的项目其实已经融入了webpack。更多时候我们会在项目根目录下面建一个vue.config.js文件,用来做webpack的一些配置。

    最近使用的配置大概是这样的:

    module.exports = {
      /* 部署生产环境和开发环境下的URL:可对当前环境进行区分,baseUrl 从 Vue CLI 3.3 起已弃用,要使用publicPath */
      /* baseUrl: process.env.NODE_ENV === 'production' ? './' : '/' */
      // publicPath: process.env.NODE_ENV === "production" ? "/public/" : "./",
      publicPath: './',
      /* 输出文件目录:在npm run build时,生成文件的目录名称 */
      outputDir: 'dist',
      /* 放置生成的静态资源 (js、css、img、fonts) 的 (相对于 outputDir 的) 目录 */
      assetsDir: 'assets',
      /* 是否在构建生产包时生成 sourceMap 文件,false将提高构建速度 */
      productionSourceMap: false,
      /* 默认情况下,生成的静态资源在它们的文件名中包含了 hash 以便更好的控制缓存,你可以通过将这个选项设为 false 来关闭文件名哈希。(false的时候就是让原来的文件名不改变) */
      filenameHashing: true,
      /* 代码保存时进行eslint检测 */
      lintOnSave: true,
      /* webpack-dev-server 相关配置 */
      devServer: {
        /* 自动打开浏览器 */
        open: true,
        /* 设置为0.0.0.0则所有的地址均能访问 */
        host: '0.0.0.0',
        port: 8085,
        https: false,
        hotOnly: false
      }
    }

    devServer中其实还有一个proxy属性,可以用做代理,简单来说,配好了他,就可以用来实现跨域

    因为dev-server使用了http-proxy-middleware包。

    例如你在localhost:3000上有后端服务的话,可以这样启动代理

    proxy: {
      "/api": "http://localhost:3000"
    }

    请求到/api/users现在会被代理到请求http://localhost:3000/api/user

    如果不想始终传递/api,可以重写路径:

    proxy: {
      "/api": {
        target: "http://localhost:3000",
        pathRewrite: {"^/api" : ""}
      }
    }

    默认情况下,不接受运行在https上,且使用了无效证书的后端服务器,如果你想要接收,修改配置如下:

    proxy: {
      "/api": {
        target: "https://other-server.example.com",
        secure: false
      }
    }

    有时你不想代理所有的请求。可以基于一个函数的返回值绕过代理。

    在函数中你可以访问请求体、响应体和代理选项。必须返回false或路径,来跳过代理请求。

    例如:对于浏览器请求,你想要提供一个HTML页面,但是对于API请求则保持代理。你可以这样做:

    proxy: {
      "/api": {
        target: "http://localhost:3000",
        bypass: function(req, res, proxyOptions) {
          if (req.headers.accept.indexOf("html") !== -1) {
            console.log("Skipping proxy for browser request.");
            return "/index.html";
          }
        }
      }
    }

    如果要将多个特定路径代理到统一目标,可以使用一个或多个具有上下文属性的对象数组:

    proxy: [{
      context: ["/auth", "/api"],
      target: "http://localhost:3000",
    }]

    还可以同时代理多个

    module.exports = {
      devServer: {
        proxy: {
          '/api': {
            target: '<url>',
            ws: true,
            changeOrigin: true
          },
          '/foo': {
            target: '<other_url>'
          }
        }
      }
    }

    各种骚操作,等待你去发掘应用。

  • 相关阅读:
    关于sizeof表达式作为数组元素个数的编译
    【deque】滑动窗口、双端队列解决数组问题
    【二叉树】重建二叉树
    字符数组与字符串指针
    【STL】C中的qsort与C++中的sort
    对C++不是类型安全语言的理解
    【vector】创建一个二维vector当作二维数组用
    批量处理改变文件名、文件后缀名
    位运算
    关于sqlserver帐号被禁用问题
  • 原文地址:https://www.cnblogs.com/chao202426/p/12053502.html
Copyright © 2011-2022 走看看