ckn.backend
Version:
CKN Framework for Backend
64 lines (58 loc) • 1.91 kB
JavaScript
import {File} from 'ckn.stream';
import {Middleware} from "../core/Middleware.js";
import express from "express";
import webpack from "webpack";
import path from "path";
import fs from "fs";
class FrontendMiddleware extends Middleware {
constructor() {
super();
this.priority = 5;
this.clientFolder = './client/';
this.appFolder = './apps';
this.entry = ['./apps/app.js'];
this.output = 'app.js';
}
changeClientFolder(folder) {
this.clientFolder = folder
return this;
}
changeAppFolder(folder) {
this.appFolder = folder;
return this;
}
changeOutputFileName(file) {
this.output = file;
return this;
}
async onStartingServer(backend, next) {
backend.server.use("/ckn.core/", express.static("./node_modules/ckn.core/"));
backend.server.use("/ckn.frontend/", express.static("./node_modules/ckn.frontend/"));
backend.server.use("/ckn.frontend/ui", express.static("./node_modules/ckn.frontend/ui"));
if (!fs.existsSync(path.resolve(process.cwd(), this.appFolder))) {
fs.mkdirSync(path.resolve(process.cwd(), this.appFolder));
}
if (!fs.existsSync(path.resolve(process.cwd(), this.clientFolder))) {
fs.mkdirSync(path.resolve(process.cwd(), this.clientFolder));
}
webpack({
entry: this.entry,
mode: 'production',
output: {
path: path.resolve(process.cwd(), this.clientFolder),
filename: this.output
},
optimization: {
minimize: false
}
}, async (err, stats) => {
if (err || stats.hasErrors()) {
throw new Error(stats);
}
else {
next();
}
});
}
}
export {FrontendMiddleware}