dev-toolkit
Version:
Universal Development Toolkit for React Veterans
45 lines (39 loc) • 1.36 kB
JavaScript
import express from 'express';
import expressHandlebars from 'express-handlebars';
import path from 'path';
import fs from 'fs';
import React from 'react';
import { renderToString } from 'react-dom/server';
import clearModule from 'clear-module';
import { isDev } from 'dev-toolkit/settings';
const serverPort = process.env.SERVER_PORT || 3000;
const serverViews = path.resolve(process.cwd(), 'src/server/views');
const rootComponentPath = path.resolve(process.cwd(), 'src/client/RootComponent');
export default new class {
constructor() {
this.express = express();
this.express.engine('hbs', expressHandlebars.create().engine);
this.express.set('views', serverViews).set('view engine', 'hbs');
}
start({ assets, buildFolder }) {
if (isDev) {
this.express.use((req, res) => {
if (isDev) {
clearModule(rootComponentPath);
}
import(rootComponentPath).then(module => {
const RootComponent = module.default;
res.status(200).render('template', {
assets,
renderedHtml: renderToString(<RootComponent />),
});
});
});
} else {
this.express.use(express.static(buildFolder));
}
this.serverInstance = this.express.listen(serverPort, () => {
console.log(`Server is listening on port ${serverPort}`);
});
}
}();