2014-11-06 9 views
10

Wie erreicht man eine 'proxy' (ähnlich grunt-connect-proxy) Option mit webpack-dev-server?Webpack-dev-server mit Bypass-Proxy

Ich verwende webpack und webpack-dev-server mit Grunt. Eine Aufgabe in Gruntfile.js (unter Code) kann den Server auf Port 8080 starten. Ich möchte für alle Backend-Datenanforderungen eine Proxy-Einrichtung hinzufügen (Kontext-URL/ajax/*).

 "webpack-dev-server": { 
     options: { 
      webpack: webpackConfig, 
      publicPath: "/src/assets" 
     }, 
     start: { 
      keepAlive: true, 
      watch: true    
     } 
    } 
+0

Konnten Sie spezifischer sein Proxy ** sein? Führen Sie webpack-dev-server über CLI oder API aus? Was meinst du mit "Güte" - meinst du live-reload? Es ist schwierig, mit tatsächlichen Codebeispielen zu antworten, wenn die Frage so generisch ist. –

Antwort

21

Im webpack Config starten zu entwickeln Sie können devServer.proxy folgendermaßen verwenden:

proxy: { 
    '/ajax/*': 'http://your.backend/' 
} 
+0

toll, danke bro –

+0

Ich war erfolgreich mit der Proxy-Option bei der Verwendung von Express, aber nach der Migration zu Koa und Verwendung von koa-webpack-dev-der hatte ich kein Glück. Irgendwelche Ideen? – walkerrandophsmith

+0

Ich kann das Problem mit 'devServer.proxy' Einstellungen nicht debuggen. WebpackDevServer führt keine Proxy-Aufrufe an einen anderen Standort durch. Aber alle direkten Anrufe passieren, so ist es definitiv ein Problem der Webpack-Dev-Server-Proxying. Wie kann ich es debuggen? – boldnik

1

ich landete mit 'Grunzen-contrib-connect' und 'Grunzen-connect-proxy' mit 'webpack-dev-Middleware'. So kann ich eine Proxy-Middleware haben, um alle meine Datenanforderungen zu bearbeiten, und eine Webpack-Middleware, um statische Paketdateianforderungen zu bearbeiten.

var proxySnippet = require('grunt-connect-proxy/lib/utils').proxyRequest; 
    var mountFolder = function (connect, dir) { 
     return connect.static(require('path').resolve(dir)); 
    }; 

    var prepareDevWebpackMiddleware = function() { 

     webpackConfig.devtool = "eval-source-map"; 
     var compiler = webpack(require("./webpack.config.js")); 

     return webpackDevMiddleware(compiler, { 
      publicPath : "/assets"   
     }); 
    }; 

---- GRUNZEN TASK ----

 connect: { 
      options: { 
       port: 8080, 
       hostname: 'localhost', 
       livereload : true 
      }, 
      proxies: [{ 
       context: '/api', 
       host: 'localhost', 
       port: 8000 
      }], 
      livereload: { 
       options: { 
        middleware: function (connect) { 
         return [ 
          prepareDevWebpackMiddleware(), 
          proxySnippet, 
          mountFolder(connect, 'src') 
         ]; 
        } 
       } 
      } 
     } 
+0

Was ist 'webpackConfig.devtool =" eval-source-map ";' tun in 'prepareDevWebpackMiddleware'? Das sieht nach dem falschen Ort für einen solchen Nebeneffekt aus. – Andy

0

webpack-dev-Server nicht wissen, wie mit dem Inhalt zu tun, so dass es eine Config hat die Proxy können alle Ihre Anfrage an spezifischen Server-Handle-Inhalt.

zum Beispiel:

Sie sollten 'Grunzen Inhalt' führen Sie Ihre Content-Server starten dann 'Grunzen dienen' laufen

'use strict'; 
 

 
var webpackDistConfig = require('./webpack.dist.config.js'), 
 
    webpackDevConfig = require('./webpack.config.js'); 
 

 
var mountFolder = function (connect, dir) { 
 
    return connect.static(require('path').resolve(dir)); 
 
}; 
 

 
module.exports = function (grunt) { 
 
    // Let *load-grunt-tasks* require everything 
 
    require('load-grunt-tasks')(grunt); 
 

 
    // Read configuration from package.json 
 
    var pkgConfig = grunt.file.readJSON('package.json'); 
 

 
    grunt.initConfig({ 
 
    pkg: pkgConfig, 
 

 
    webpack: { 
 
     options: webpackDistConfig, 
 

 
     dist: { 
 
     cache: false 
 
     } 
 
    }, 
 

 
    'webpack-dev-server': { 
 
     options: { 
 
     hot: true, 
 
     port: 8000, 
 
     webpack: webpackDevConfig, 
 
     publicPath: '/assets/', 
 
     contentBase: {target : 'http://localhost:13800'}, 
 
     }, 
 

 
     start: { 
 
     keepAlive: true, 
 
     } 
 
    }, 
 

 
    connect: { 
 
     options: { 
 
     port: 8000, 
 
     keepalive: true, 
 
     }, 
 
     proxies: [ 
 
     { 
 
      context: '/', 
 
      host: '127.0.0.1', 
 
      port: 8031, 
 
      https: false, 
 
      xforward: false 
 
     } 
 
     ], 
 
     dev: { 
 
     options: { 
 
      port : 13800, 
 
      middleware: function (connect) { 
 
      return [ 
 
       mountFolder(connect, pkgConfig.src), 
 
       require('grunt-connect-proxy/lib/utils').proxyRequest 
 
      ]; 
 
      } 
 
     } 
 
     }, 
 
     dist: { 
 
     options: { 
 
      middleware: function (connect) { 
 
      return [ 
 
       mountFolder(connect, pkgConfig.dist), 
 
       require('grunt-connect-proxy/lib/utils').proxyRequest 
 
      ]; 
 
      } 
 
     } 
 
     } 
 
    }, 
 

 
    open: { 
 
     options: { 
 
     delay: 500 
 
     }, 
 
     dev: { 
 
     path: 'http://localhost:<%= connect.options.port %>/webpack-dev-server/' 
 
     }, 
 
     dist: { 
 
     path: 'http://localhost:<%= connect.options.port %>/' 
 
     } 
 
    }, 
 

 
    karma: { 
 
     unit: { 
 
     configFile: 'karma.conf.js' 
 
     } 
 
    }, 
 

 
    copy: { 
 
     dist: { 
 
     files: [ 
 
      // includes files within path 
 
      { 
 
      flatten: true, 
 
      expand: true, 
 
      src: ['<%= pkg.src %>/*'], 
 
      dest: '<%= pkg.dist %>/', 
 
      filter: 'isFile' 
 
      }, 
 
      { 
 
      flatten: true, 
 
      expand: true, 
 
      src: ['<%= pkg.src %>/styles/*'], 
 
      dest: '<%= pkg.dist %>/styles/' 
 
      }, 
 
      { 
 
      flatten: true, 
 
      expand: true, 
 
      src: ['<%= pkg.src %>/images/*'], 
 
      dest: '<%= pkg.dist %>/images/' 
 
      }, 
 
     ] 
 
     } 
 
    }, 
 

 
    clean: { 
 
     dist: { 
 
     files: [{ 
 
      dot: true, 
 
      src: [ 
 
      '<%= pkg.dist %>' 
 
      ] 
 
     }] 
 
     } 
 
    } 
 
    }); 
 

 
    grunt.registerTask('serve', function (target) { 
 
    if (target === 'dist') { 
 
     return grunt.task.run(['configureProxies', 'build', 'open:dist', 'connect:dist']); 
 
    } 
 

 
    grunt.task.run([ 
 
     'open:dev', 
 
     'webpack-dev-server' 
 
    ]); 
 
    }); 
 

 
    grunt.registerTask('content', ['configureProxies', 'connect:dev']); 
 

 
    grunt.registerTask('test', ['karma']); 
 

 
    grunt.registerTask('build', ['clean', 'copy', 'webpack']); 
 

 
    grunt.registerTask('default', []); 
 
};

Verwandte Themen