mirror of
https://github.com/qlik-oss/nebula.js.git
synced 2025-12-19 17:58:43 -05:00
125 lines
2.6 KiB
JavaScript
125 lines
2.6 KiB
JavaScript
/* eslint global-require: 0 */
|
|
const path = require('path');
|
|
const chalk = require('chalk');
|
|
|
|
const webpack = require('webpack');
|
|
const WebpackDevServer = require('webpack-dev-server');
|
|
|
|
module.exports = async ({
|
|
host,
|
|
port,
|
|
enigmaConfig,
|
|
snPath,
|
|
snName,
|
|
dev = false,
|
|
}) => {
|
|
let config;
|
|
let contentBase;
|
|
|
|
if (dev) {
|
|
const webpackConfig = require('./webpack.build.js');
|
|
const srcDir = path.resolve(__dirname, '../web');
|
|
const distDir = path.resolve(srcDir, '../dist');
|
|
contentBase = distDir;
|
|
config = webpackConfig({
|
|
srcDir,
|
|
distDir,
|
|
dev: true,
|
|
snPath,
|
|
});
|
|
} else {
|
|
const webpackConfig = require('./webpack.prod.js');
|
|
const srcDir = path.resolve(__dirname, '../dist');
|
|
contentBase = srcDir;
|
|
config = webpackConfig({
|
|
srcDir,
|
|
snPath,
|
|
});
|
|
}
|
|
|
|
const options = {
|
|
clientLogLevel: 'none',
|
|
hot: true,
|
|
host,
|
|
port,
|
|
overlay: {
|
|
warnings: false,
|
|
errors: true,
|
|
},
|
|
quiet: true,
|
|
open: true,
|
|
contentBase: [
|
|
contentBase,
|
|
],
|
|
historyApiFallback: {
|
|
index: '/eHub.html',
|
|
},
|
|
before(app) {
|
|
app.get('/info', (req, res) => {
|
|
res.json({
|
|
enigma: enigmaConfig,
|
|
supernova: {
|
|
name: snName,
|
|
},
|
|
});
|
|
});
|
|
},
|
|
proxy: [{
|
|
context: '/render',
|
|
target: `http://${host}:${port}/eRender.html`,
|
|
ignorePath: true,
|
|
}, {
|
|
context: '/dev',
|
|
target: `http://${host}:${port}/eDev.html`,
|
|
ignorePath: true,
|
|
}],
|
|
};
|
|
|
|
console.log('Starting development server...');
|
|
|
|
WebpackDevServer.addDevServerEntrypoints(config, options);
|
|
const compiler = webpack(config);
|
|
const server = new WebpackDevServer(compiler, options);
|
|
|
|
const close = () => {
|
|
server.close(() => {
|
|
process.exit(0);
|
|
});
|
|
};
|
|
|
|
['SIGINT', 'SIGTERM'].forEach((signal) => {
|
|
process.on(signal, close);
|
|
});
|
|
|
|
let initiated = false;
|
|
|
|
return new Promise((resolve, reject) => { // eslint-disable-line consistent-return
|
|
compiler.hooks.done.tap('nebula serve', (stats) => {
|
|
if (!initiated) {
|
|
initiated = true;
|
|
const url = `http://${host}:${port}`;
|
|
console.log(`...running at ${chalk.green(url)}`);
|
|
|
|
resolve({
|
|
context: '',
|
|
url,
|
|
close,
|
|
});
|
|
|
|
if (stats.hasErrors()) {
|
|
stats.compilation.errors.forEach((e) => {
|
|
console.log(chalk.red(e));
|
|
});
|
|
process.exit(1);
|
|
}
|
|
}
|
|
});
|
|
|
|
server.listen(port, host, (err) => {
|
|
if (err) {
|
|
reject(err);
|
|
}
|
|
});
|
|
});
|
|
};
|