1
0
mirror of https://github.com/BookStackApp/BookStack.git synced 2025-12-19 10:42:29 +03:00
Files
bookstack/dev/build/esbuild.js

83 lines
2.3 KiB
JavaScript

#!/usr/bin/env node
import * as esbuild from 'esbuild';
import * as path from 'node:path';
import * as fs from 'node:fs';
import * as process from "node:process";
// Check if we're building for production
// (Set via passing `production` as first argument)
const mode = process.argv[2];
const isProd = mode === 'production';
const __dirname = import.meta.dirname;
// Gather our input files
const entryPoints = {
app: path.join(__dirname, '../../resources/js/app.ts'),
code: path.join(__dirname, '../../resources/js/code/index.mjs'),
'legacy-modes': path.join(__dirname, '../../resources/js/code/legacy-modes.mjs'),
markdown: path.join(__dirname, '../../resources/js/markdown/index.mts'),
wysiwyg: path.join(__dirname, '../../resources/js/wysiwyg/index.ts'),
};
// Watch styles so we can reload on change
if (mode === 'watch') {
entryPoints['styles-dummy'] = path.join(__dirname, '../../public/dist/styles.css');
}
// Locate our output directory
const outdir = path.join(__dirname, '../../public/dist');
// Define the options for esbuild
const options = {
bundle: true,
metafile: true,
entryPoints,
outdir,
sourcemap: true,
target: 'es2021',
mainFields: ['module', 'main'],
format: 'esm',
minify: isProd,
logLevel: 'info',
loader: {
'.html': 'copy',
'.svg': 'text',
},
absWorkingDir: path.join(__dirname, '../..'),
alias: {
'@icons': './resources/icons',
lexical: './resources/js/wysiwyg/lexical/core',
'@lexical': './resources/js/wysiwyg/lexical',
},
banner: {
js: '// See the "/licenses" URI for full package license details',
css: '/* See the "/licenses" URI for full package license details */',
},
};
if (mode === 'watch') {
options.inject = [
path.join(__dirname, './livereload.js'),
];
}
const ctx = await esbuild.context(options);
if (mode === 'watch') {
// Watch for changes and rebuild on change
ctx.watch({});
let {hosts, port} = await ctx.serve({
servedir: path.join(__dirname, '../../public'),
cors: {
origin: '*',
}
});
} else {
// Build with meta output for analysis
ctx.rebuild().then(result => {
fs.writeFileSync('esbuild-meta.json', JSON.stringify(result.metafile));
}).catch(() => process.exit(1));
}