feat: webpack webinstaller

This commit is contained in:
Barış Soner Uşaklı
2022-02-21 19:04:19 -05:00
parent 66651d42fb
commit b9cc5c0905
4 changed files with 22 additions and 36 deletions

View File

@@ -8,7 +8,7 @@ const path = require('path');
const childProcess = require('child_process'); const childProcess = require('child_process');
const less = require('less'); const less = require('less');
const uglify = require('uglify-es'); const webpack = require('webpack');
const nconf = require('nconf'); const nconf = require('nconf');
const Benchpress = require('benchpressjs'); const Benchpress = require('benchpressjs');
@@ -46,16 +46,6 @@ winston.configure({
}); });
const web = module.exports; const web = module.exports;
const scripts = [
'node_modules/jquery/dist/jquery.js',
'node_modules/xregexp/xregexp-all.js',
'public/src/modules/slugify.js',
'public/src/utils.js',
'public/src/installer/install.js',
'node_modules/zxcvbn/dist/zxcvbn.js',
];
let installing = false; let installing = false;
let success = false; let success = false;
let error = false; let error = false;
@@ -68,6 +58,8 @@ web.install = async function (port) {
winston.info(`Launching web installer on port ${port}`); winston.info(`Launching web installer on port ${port}`);
app.use(express.static('public', {})); app.use(express.static('public', {}));
app.use('/assets', express.static(path.join(__dirname, '../build/webpack'), {}));
app.engine('tpl', (filepath, options, callback) => { app.engine('tpl', (filepath, options, callback) => {
filepath = filepath.replace(/\.tpl$/, '.js'); filepath = filepath.replace(/\.tpl$/, '.js');
@@ -82,7 +74,7 @@ web.install = async function (port) {
await Promise.all([ await Promise.all([
compileTemplate(), compileTemplate(),
compileLess(), compileLess(),
compileJS(), runWebpack(),
copyCSS(), copyCSS(),
loadDefaults(), loadDefaults(),
]); ]);
@@ -93,6 +85,13 @@ web.install = async function (port) {
} }
}; };
async function runWebpack() {
const util = require('util');
const webpackCfg = require('../webpack.installer');
const compiler = webpack(webpackCfg);
const webpackRun = util.promisify(compiler.run).bind(compiler);
await webpackRun();
}
function launchExpress(port) { function launchExpress(port) {
server = app.listen(port, () => { server = app.listen(port, () => {
@@ -167,7 +166,7 @@ function install(req, res) {
} }
winston.info('Starting setup process'); winston.info('Starting setup process');
winston.info(setupEnvVars); winston.info(JSON.stringify(setupEnvVars, null, 4));
launchUrl = setupEnvVars.url; launchUrl = setupEnvVars.url;
const child = require('child_process').fork('app', ['--setup'], { const child = require('child_process').fork('app', ['--setup'], {
@@ -257,23 +256,6 @@ async function compileLess() {
} }
} }
async function compileJS() {
let code = '';
for (const srcPath of scripts) {
// eslint-disable-next-line no-await-in-loop
const buffer = await fs.promises.readFile(path.join(__dirname, '..', srcPath));
code += buffer.toString();
}
const minified = uglify.minify(code, {
compress: false,
});
if (!minified.code) {
throw new Error('[[error:failed-to-minify]]');
}
await fs.promises.writeFile(path.join(__dirname, '../public/installer.min.js'), minified.code);
}
async function copyCSS() { async function copyCSS() {
const src = await fs.promises.readFile( const src = await fs.promises.readFile(
path.join(__dirname, '../node_modules/bootstrap/dist/css/bootstrap.min.css'), 'utf8' path.join(__dirname, '../node_modules/bootstrap/dist/css/bootstrap.min.css'), 'utf8'

View File

@@ -1,6 +1,11 @@
/* eslint-disable no-redeclare */
'use strict'; 'use strict';
/* global zxcvbn, slugify */ const $ = require('jquery');
const zxcvbn = require('zxcvbn');
const utils = require('../utils');
const slugify = require('../modules/slugify');
$('document').ready(function () { $('document').ready(function () {
setupInputs(); setupInputs();

View File

@@ -9,7 +9,7 @@
<link rel="stylesheet" type="text/css" href="bootstrap.min.css"> <link rel="stylesheet" type="text/css" href="bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="installer.css"> <link rel="stylesheet" type="text/css" href="installer.css">
<script type="text/javascript" async defer src="installer.min.js"></script> <script type="text/javascript" async defer src="/assets/installer.min.js"></script>
</head> </head>
<body> <body>

View File

@@ -10,10 +10,9 @@ module.exports = {
installer: './public/src/installer/install.js', installer: './public/src/installer/install.js',
}, },
output: { output: {
filename: '[name].bundle.js', filename: '[name].min.js',
chunkFilename: '[name].bundle.js', path: path.resolve(__dirname, 'build/webpack'),
path: path.resolve(__dirname, 'dist'), publicPath: `/assets/`,
publicPath: '/dist/',
}, },
resolve: { resolve: {
symlinks: false, symlinks: false,