69 lines
1.5 KiB
JavaScript
69 lines
1.5 KiB
JavaScript
let esbuild = require("esbuild");
|
|
let htmlPlugin = require("./frappe-html");
|
|
let vue = require("esbuild-vue");
|
|
let http = require("http");
|
|
let httpProxy = require("http-proxy");
|
|
let path = require("path");
|
|
|
|
const { get_public_path, apps_list } = require("../rollup/rollup.utils");
|
|
|
|
let proxy = httpProxy.createProxyServer({});
|
|
|
|
proxy.on("error", function(e) {
|
|
console.error(e);
|
|
});
|
|
|
|
let server = http.createServer((req, res) => {
|
|
if (req.url.includes("/public/")) {
|
|
buildAsset(req.url).then(result => {
|
|
if (!result) {
|
|
proxy_request();
|
|
return;
|
|
}
|
|
res.setHeader("Content-Header", "application/javascript");
|
|
res.writeHead(200);
|
|
res.end(result);
|
|
});
|
|
} else {
|
|
proxy_request();
|
|
}
|
|
|
|
function proxy_request() {
|
|
proxy.web(req, res, { target: "http://localhost:8000" });
|
|
}
|
|
});
|
|
|
|
server.listen(8080);
|
|
|
|
server.on("listening", () => {
|
|
console.log("dev server started at http:localhost:8080");
|
|
});
|
|
|
|
function buildAsset(url) {
|
|
if (url.startsWith("/")) {
|
|
url = url.substr(1);
|
|
}
|
|
let app;
|
|
let parts = url.split(path.sep);
|
|
if (apps_list.includes(parts[0])) {
|
|
app = parts[0];
|
|
}
|
|
if (!app) return;
|
|
|
|
let filepath = path.resolve(get_public_path(app), url.split("public/")[1]);
|
|
console.log("building " + url);
|
|
|
|
return esbuild
|
|
.build({
|
|
entryPoints: [filepath],
|
|
write: false,
|
|
bundle: true,
|
|
plugins: [htmlPlugin, vue()],
|
|
define: {
|
|
"process.env.NODE_ENV": "'development'"
|
|
}
|
|
})
|
|
.then(result => {
|
|
return result.outputFiles[0].text;
|
|
});
|
|
}
|