No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.
 
 
 
 
 
 

70 líneas
1.5 KiB

  1. let esbuild = require("esbuild");
  2. let htmlPlugin = require("./esbuild-plugin-html");
  3. let vue = require("esbuild-vue");
  4. let http = require("http");
  5. let httpProxy = require("http-proxy");
  6. let path = require("path");
  7. const { get_public_path, apps_list } = require("../rollup/rollup.utils");
  8. let proxy = httpProxy.createProxyServer({});
  9. proxy.on("error", function(e) {
  10. console.error(e);
  11. });
  12. let server = http.createServer((req, res) => {
  13. if (req.url.includes("/public/")) {
  14. buildAsset(req.url).then(result => {
  15. if (!result) {
  16. proxy_request();
  17. return;
  18. }
  19. res.setHeader("Content-Header", "application/javascript");
  20. res.writeHead(200);
  21. res.end(result);
  22. });
  23. } else {
  24. proxy_request();
  25. }
  26. function proxy_request() {
  27. proxy.web(req, res, { target: "http://localhost:8000" });
  28. }
  29. });
  30. server.listen(8080);
  31. server.on("listening", () => {
  32. console.log("dev server started at http:localhost:8080");
  33. });
  34. function buildAsset(url) {
  35. if (url.startsWith("/")) {
  36. url = url.substr(1);
  37. }
  38. let app;
  39. let parts = url.split(path.sep);
  40. if (apps_list.includes(parts[0])) {
  41. app = parts[0];
  42. }
  43. if (!app) return;
  44. let filepath = path.resolve(get_public_path(app), url.split("public/")[1]);
  45. console.log("building " + url);
  46. return esbuild
  47. .build({
  48. entryPoints: [filepath],
  49. write: false,
  50. bundle: true,
  51. plugins: [htmlPlugin, vue()],
  52. define: {
  53. "process.env.NODE_ENV": "'development'"
  54. }
  55. })
  56. .then(result => {
  57. return result.outputFiles[0].text;
  58. });
  59. }