webpack-dev-server 代理:带通配符的上下文

Posted

技术标签:

【中文标题】webpack-dev-server 代理:带通配符的上下文【英文标题】:webpack-dev-server proxy: context with wildcard 【发布时间】:2016-08-08 07:22:19 【问题描述】:

我想将 /v1/* 代理到 http://myserver.com,这是我的脚本

devServer: 
  historyApiFallBack: true,
  // progress: true,
  hot: true,
  inline: true,
  // https: true,
  port: 8081,
  contentBase: path.resolve(__dirname, 'public'),
  proxy: 
    '/v1/*': 
      target: 'http://api.in.uprintf.com',
      secure: false
      // changeOrigin: true
    ,
  ,
,

但它不起作用,

【问题讨论】:

配置需要放在哪里? 【参考方案1】:

更新: 感谢@chimurai,设置changeOrigin: true 对使其正常工作很重要。

Underneath webpack-dev-server 将所有代理配置从documentation 传递给http-proxy-middleware。很明显,您想要的用例实际上是通过/v1/** 路径实现的:

devServer: 
   historyApiFallBack: true,
   // progress: true,
   hot: true,
   inline: true,
   // https: true,
   port: 8081,
   contentBase: path.resolve(__dirname, 'public'),
   proxy: 
     '/v1/**': 
       target: 'http://api.in.uprintf.com',
       secure: false,
       changeOrigin: true
     
   
 ,

【讨论】:

应该使用代理选项:changeOrigin: true changeOrigin: true/false, Default: false - changes the origin of the host header to the target URL 是的,它确实有效。感谢您的回答! 我是 webpack 新手,你把代理的配置放在哪里? 哪个版本的 webpack 支持这个代理功能,我使用的是 webpack: 3.11.1 和 webpack-dev-server: 2.9.6 和 http-proxy-middelware: 0.19.1。这个代理配置不适合我,我已经尝试了代理配置的所有可能组合。【参考方案2】:

确保您的请求 url 和端口与您的 webpack-dev-server 正在运行的匹配。因此,如果您的 api 位于 http://localhost:5000,并且您的开发服务器在 http://localhost:8080 上运行,请确保您的所有请求都发往 http://localhost:8080。最好将您的请求发送到localhost:8080/api(以避免与应用程序路由冲突)并使用路径重写来删除/api。

示例:

Webpack 开发服务器代理配置:

proxy: 
    '/api': 
        target: 'http://localhost:5000',
        pathRewrite:  '^/api': '' ,
    ,

Webpack 开发服务器运行于:

http://localhost:8080

所需的 API 端点:

http://localhost:5000/items

在您的应用中,发出请求:

http://localhost:8080/api/items.

应该工作。在我看来,以上所有问题都源于向 API url 和端口发出请求,而不是 webpack 开发服务器 url 和端口,并使用代理和路径重写将请求定向到 API。

【讨论】:

【参考方案3】:

这对我来说很好。

    devServer: 
        host: '11.11.111.111',          //local ip
        port: 8080,
        contentBase: outputpath,
        historyApiFallback: true,
        inline: true,
        proxy: 
          '/api':
                target:'http://example.com',
                pathRewrite: '^/api' : '',
                secure:false,
                changeOrigin:true
          
        
    ,

//使用

    $.ajax(
        url:'/api/pvp/share/getsharecfg.php',
        dataType:'json',
        ...

【讨论】:

请在您的答案中添加更多信息。一个好的答案更像是一个代码块。

以上是关于webpack-dev-server 代理:带通配符的上下文的主要内容,如果未能解决你的问题,请参考以下文章

Webpack-dev-server 不通过代理向外部域发送请求

webpack-dev-server proxy代理

用webpack-dev-server开发时代理,决解开发时跨域问题

webpack-dev-server proxy代理,get请求成功,post请求失败

用webpack-dev-server开发时代理,决解开发时跨域问题

用于 CORS 请求的 webpack-dev-server 配置