有人知道如何在webpack-dev-server或类似服务器中代理index.html吗?

时间:2018-09-27 00:20:06

标签: asp.net-mvc webpack webpack-dev-server

我将MVC作为后端。 MVC控制器/视图具有_StartPage.cshtml,_Layout.cshtml(它们组合形成_index.cshtml)。

因此,我需要使用webpack开发服务器代理从后端服务器获取index.html。有什么办法吗?

到目前为止,这是我想出的

devServer: {
    historyApiFallback: true,
    index: '',
    contentBase: "./",
    port: 8000,
    proxy: [{
        //Only works for api, index.html does not  
        context: ['/index.html', '/api'],
        target: 'http://localhost',
        pathRewrite: { '^/api': '/TestApp/api' }
    }]
},

如果可以解决问题,我愿意使用webpack-dev-server以外的任何其他客户端服务器吗?

请注意,这将仅在“开发中”而不是在生产中使用。

2 个答案:

答案 0 :(得分:0)

我认为您希望每个路径都有不同的条目。像这样的东西?

devServer: {
  contentBase: './',
  port: 8000
  proxy: {
    '/index.html': {
      target: 'http://localhost/',
      pathRewrite: { '^/': 'TestApp/index.html' },
    },
    '/api': {
      target: 'http://localhost/',
      pathRewrite: { '^/api': '/TestApp/api' }
    },
  },
}

答案 1 :(得分:0)

您的项目结构如何?

必须在开发模式下使用webpack-dev-server ,在构建和部署后,您需要更改生产模式的api网址。

我是前端用户,遇到类似的问题,我通过DefinePlugin解决了这个问题,可以在不同的模式下更改api。

我的webpack是这样的:

├webpack.common.js
├webpack.dev.js
├webpack.prod.js

webpack.common.js

devServer: { 
    // contentBase: 'dist/', 
    historyApiFallback: true,
    watchOptions: { aggregateTimeout: 300, poll: 1000 },
    headers: {
        "Access-Control-Allow-Origin": "*",
        "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, PATCH, OPTIONS",
        "Access-Control-Allow-Headers": "X-Requested-With, content-type, Authorization"
    },
    proxy: {
        '/': {
            target: 'xxxxxxxxxxxx/website/',//url
            changeOrigin: true,
            secure: false,
        }
    }
},

webpack.dev.js

plugins:[
    new webpack.DefinePlugin({
        'SERVICE_URL': JSON.stringify('')
    })
]

webpack.prod.js

plugins:[
    new webpack.DefinePlugin({
        'SERVICE_URL': JSON.stringify('https://xxx.api.com/') //real api
    })
]

获取/ ajax代码

console.log(SERVICE_URL)
$.ajax({
    url: SERVICE_URL+'api/%E6%AD%A6%E6%BC%A2%E8%82%BA%E7%82%8E_%E5%8F%B0%E5%95%86_simple.json',

  ...

这是我的解决方案,我希望它能给我一些启发。