别动手动脚的,把手拿开!
我是在地球上成长的赛亚人!

Posted by 小程同学| Blog on March 24, 2018

 今天碰到了webpack的代理跨域问题,记录一下 纪念一下瞎jb查了2个多小时资料的时间

webpack-dev-server的代理和vue-cli的代理  一个是devServer中设置一个是在proxyTable中设置 这其实是webpack的代理 而不是axios的跨域

module.exports = {

//项目的文件夹 可以直接用文件夹名称 默认会找index.js ,也可以确定是哪个文件名字
entry: {
    app: ['./src/js/index.js'],
    vendors: ['jquery', 'moment'], //需要打包的第三方插件
    // login:['./src/css/login.less']
},

//输出的文件名,合并以后的js会命名为bundle.js
output: {
    path: path.join(__dirname, "dist/"),
    publicPath: "http://localhost:8088/dist/",
    filename: "bundle_[name].js"
},
devServer: {
    historyApiFallback: true,
    contentBase: "./",
    quiet: false, //控制台中不输出打包的信息
    noInfo: false,
    hot: true, //开启热点
    inline: true, //开启页面自动刷新
    lazy: false, //不启动懒加载
    progress: true, //显示打包的进度
    watchOptions: {
        aggregateTimeout: 300
    },
    port: '8088', //设置端口号
    //其实很简单的,只要配置这个参数就可以了
    proxy: {
        '/index.php': {
            target: 'http://localhost:80/index.php',
            secure: false
        }
    }

}  ..........

};

上面实例中我们把本地的端口号设置为了:8088,如果这个时候接口放在了端口为80的服务器上,并且我们请求的接口url如下:

http://localhost:80/index.php

这个时候只需要在proxy使用正则表达式匹配/index.php,然后 匹配到 转向target设置的目标接口;这个时候使用ajax请求接口就不要写上目标接口的域名,只需要写上index.php就可以了。

$.ajax({ type: ‘GET’, url: ‘/index.php’, data: {}, dataType: ‘json’, beforeSend: function () { }, success: function (data) {

    },
    error: function (error) {

    }
});

上面ajax请求的时候proxy 代理就会自动转向target设置的接口路径:

http://localhost:80/index.php