summaryrefslogtreecommitdiff
path: root/esbuild.config.js
diff options
context:
space:
mode:
Diffstat (limited to 'esbuild.config.js')
-rw-r--r--esbuild.config.js75
1 files changed, 75 insertions, 0 deletions
diff --git a/esbuild.config.js b/esbuild.config.js
new file mode 100644
index 0000000..1bee10c
--- /dev/null
+++ b/esbuild.config.js
@@ -0,0 +1,75 @@
+const esbuild = require('esbuild');
+const fs = require('fs-extra');
+const path = require('path');
+
+const production = process.env.NODE_ENV === 'production';
+
+async function buildJS() {
+ await esbuild.build({
+ entryPoints: ['src/js/script.js'],
+ bundle: true,
+ minify: production,
+ sourcemap: true,
+ target: 'es2020',
+ outfile: 'dist/bundle.js',
+ });
+}
+
+async function buildCSS() {
+ await esbuild.build({
+ entryPoints: ['src/css/style.css'],
+ bundle: true,
+ minify: production,
+ sourcemap: true,
+ loader: {
+ '.css': 'css',
+ '.woff2': 'file',
+ '.png': 'file',
+ '.svg': 'file',
+ },
+ outfile: 'dist/bundle.css',
+ });
+}
+
+async function copyAssets() {
+ await fs.copy('src/assets', 'dist', {
+ overwrite: true,
+ });
+}
+
+async function processHTML() {
+ let html = await fs.readFile('src/index.html', 'utf8');
+
+ const host = process.env.HOST || '';
+ const cleanHost = host.replace(/\/$/, '');
+
+ if (cleanHost) {
+ html = html.replace(/href="\/bundle\./g, `href="${cleanHost}/bundle.`);
+ html = html.replace(/src="\/bundle\./g, `src="${cleanHost}/bundle.`);
+ html = html.replace(/href="\/img\//g, `href="${cleanHost}/img/`);
+ html = html.replace(/src="\/oneko\//g, `src="${cleanHost}/oneko/`);
+ }
+
+ await fs.writeFile('dist/index.html', html);
+}
+
+async function clean() {
+ await fs.remove('dist');
+ await fs.ensureDir('dist');
+}
+
+async function build() {
+ try {
+ await clean();
+ await Promise.all([
+ buildJS(),
+ buildCSS(),
+ copyAssets(),
+ ]);
+ await processHTML();
+ } catch (err) {
+ process.exit(1);
+ }
+}
+
+build();