proxy.js 1.1 KB

1234567891011121314151617181920212223242526272829303132333435
  1. var http = require('http');
  2. var httpProxy = require('http-proxy');
  3. var proxy = httpProxy.createProxyServer({});
  4. var ports = {
  5. proxy: parseInt(process.env.npm_package_config_ports_proxy),
  6. jekyll: parseInt(process.env.npm_package_config_ports_jekyll),
  7. karma: parseInt(process.env.npm_package_config_ports_karma),
  8. webpack: parseInt(process.env.npm_package_config_ports_webpack)
  9. };
  10. var server = http.createServer(function(req, res) {
  11. if (/\/\d+\.\d+\.\d+/.test(req.url) || req.url.startsWith('/karma/base/dist')) {
  12. var target = 'http://localhost:' + ports.webpack + '/' + req.url.split('/').pop();
  13. proxy.web(req, res, {
  14. ignorePath: true,
  15. target: target
  16. });
  17. } else if (req.url.startsWith('/karma') || req.url === '/assets/favicon.png') {
  18. proxy.web(req, res, { ignorePath: false, target: { port: ports.karma } });
  19. } else {
  20. proxy.web(req, res, { ignorePath: false, target: { port: ports.jekyll } });
  21. }
  22. });
  23. server.on('upgrade', function (req, socket, head) {
  24. proxy.ws(req, socket, head);
  25. });
  26. proxy.on('error', function(e) {
  27. console.error(e);
  28. });
  29. console.log('Proxy listening on ' + ports.proxy);
  30. server.listen(ports.proxy);