1. 程式人生 > >用webpack-dev-server開發時代理,決解開發時跨域問題

用webpack-dev-server開發時代理,決解開發時跨域問題

端口 dex lba save progress 重要 less span npm

一、設置代理的原因


現在對前端開發的要求越來越高,並且隨著自動化以及模塊化的 誕生,前後端開發模式越來越流行。後端只負責接口,前端負責數據展示、邏輯處理。但是前後端開發模式,有一個重要的問題,就是跨域問題。

實例一

webpack-dev-server配置代理非常的方便,只需要條件一個proxy屬性,然後配置相關的參數就可以了:

var webpack = require(‘webpack‘);
var WebpackDevServer = require("webpack-dev-server");
var path = require(‘path‘);
var CURRENT_PATH = path.resolve(__dirname); // 獲取到當前目錄
var ROOT_PATH = path.join(__dirname, ‘../‘); // 項目根目錄
var MODULES_PATH = path.join(ROOT_PATH, ‘./node_modules‘); // node包目錄
var BUILD_PATH = path.join(ROOT_PATH, ‘./dist‘); // 最後輸出放置公共資源的目錄
var HtmlWebpackPlugin = require(‘html-webpack-plugin‘);
var ExtractTextPlugin = require("extract-text-webpack-plugin");
var CopyWebpackPlugin = require(‘copy-webpack-plugin‘);


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

實例二

需要webpack,webpack-dev-server

npm install webapck webpack-dev-server --save-dev

設置時

技術分享
devServer: {
        historyApiFallback: true,
          hot: true,
        inline: true,
        stats: { colors: true },
        proxy: {
            ‘/list‘: {
              target: ‘https://api.github.com‘,
              pathRewrite: {‘^/column‘ : ‘/column‘},
              changeOrigin: true
            }
         }
    },
技術分享

這段代碼就是將 ‘/list‘ 通過本地開發服務器webpack-dev-server轉發到 ‘https://api.github.com‘

參考文件:

http://www.cnblogs.com/liuchuanfeng/p/6802598.html

http://www.jb51.net/article/120259.htm

http://www.cnblogs.com/fengnovo/p/5983638.html

用webpack-dev-server開發時代理,決解開發時跨域問題