routes.js 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. 'use strict';
  2. const { createReadStream } = require('fs');
  3. const { join } = require('path');
  4. const clientBasePath = join(__dirname, '..', '..', 'client');
  5. function routes(server) {
  6. const app = server.app;
  7. const middleware = server.middleware;
  8. const options = server.options;
  9. app.get('/__webpack_dev_server__/live.bundle.js', (req, res) => {
  10. res.setHeader('Content-Type', 'application/javascript');
  11. createReadStream(join(clientBasePath, 'live.bundle.js')).pipe(res);
  12. });
  13. app.get('/__webpack_dev_server__/sockjs.bundle.js', (req, res) => {
  14. res.setHeader('Content-Type', 'application/javascript');
  15. createReadStream(join(clientBasePath, 'sockjs.bundle.js')).pipe(res);
  16. });
  17. app.get('/webpack-dev-server.js', (req, res) => {
  18. res.setHeader('Content-Type', 'application/javascript');
  19. createReadStream(join(clientBasePath, 'index.bundle.js')).pipe(res);
  20. });
  21. app.get('/webpack-dev-server/invalidate', (_req, res) => {
  22. server.invalidate();
  23. res.end();
  24. });
  25. app.get('/webpack-dev-server/*', (req, res) => {
  26. res.setHeader('Content-Type', 'text/html');
  27. createReadStream(join(clientBasePath, 'live.html')).pipe(res);
  28. });
  29. app.get('/webpack-dev-server', (req, res) => {
  30. res.setHeader('Content-Type', 'text/html');
  31. res.write(
  32. '<!DOCTYPE html><html><head><meta charset="utf-8"/></head><body>'
  33. );
  34. const outputPath = middleware.getFilenameFromUrl(options.publicPath || '/');
  35. const filesystem = middleware.fileSystem;
  36. writeDirectory(options.publicPath || '/', outputPath);
  37. res.end('</body></html>');
  38. function writeDirectory(baseUrl, basePath) {
  39. const content = filesystem.readdirSync(basePath);
  40. res.write('<ul>');
  41. content.forEach((item) => {
  42. const p = `${basePath}/${item}`;
  43. if (filesystem.statSync(p).isFile()) {
  44. res.write(`<li><a href="${baseUrl + item}">${item}</a></li>`);
  45. if (/\.js$/.test(item)) {
  46. const html = item.substr(0, item.length - 3);
  47. const containerHref = baseUrl + html;
  48. const magicHtmlHref =
  49. baseUrl.replace(
  50. // eslint-disable-next-line
  51. /(^(https?:\/\/[^\/]+)?\/)/,
  52. '$1webpack-dev-server/'
  53. ) + html;
  54. res.write(
  55. `<li><a href="${containerHref}">${html}</a>` +
  56. ` (magic html for ${item}) (<a href="${magicHtmlHref}">webpack-dev-server</a>)` +
  57. `</li>`
  58. );
  59. }
  60. } else {
  61. res.write(`<li>${item}<br>`);
  62. writeDirectory(`${baseUrl + item}/`, p);
  63. res.write('</li>');
  64. }
  65. });
  66. res.write('</ul>');
  67. }
  68. });
  69. }
  70. module.exports = routes;