fix: fix sourcemap

This commit is contained in:
KernelDeimos 2024-09-02 20:50:15 -04:00
parent d07929da1b
commit cd39bb5aa0
3 changed files with 76 additions and 74 deletions

View File

@ -1,8 +1,8 @@
const BaseConfig = require('./webpack/BaseConfig.cjs');
module.exports = {
...BaseConfig({ env: 'dev' }),
module.exports = async () => ({
...(await BaseConfig({ env: 'dev' })),
optimization: {
minimize: false
},
};
});

View File

@ -1,6 +1,6 @@
const path = require('path');
const EmitPlugin = require('./EmitPlugin.cjs');
module.exports = (options = {}) => {
module.exports = async (options = {}) => {
const config = {};
config.entry = [
'./src/init_sync.js',
@ -18,7 +18,7 @@ module.exports = (options = {}) => {
filename: 'bundle.min.js',
};
config.plugins = [
EmitPlugin({
await EmitPlugin({
options,
dir: path.join(__dirname, '../src/icons'),
}),

View File

@ -1,78 +1,80 @@
const fs = require('fs');
const path = require('path');
const uglifyjs = require('uglify-js');
const webpack = require('webpack');
module.exports = ({ dir, options }) => function () {
const compiler = this;
compiler.hooks.emit.tapAsync('EmitPlugin', async (compilation, callback) => {
let prefix_text = '';
prefix_text += `window.gui_env="${options.env}";\n`;
module.exports = async ({ dir, options }) => {
let prefix_text = '';
prefix_text += `window.gui_env="${options.env}";\n`;
// -----------------------------------------------
// Combine all images into a single js file
// -----------------------------------------------
{
let icons = 'window.icons = [];\n';
fs.readdirSync(dir).forEach(file => {
// skip dotfiles
if (file.startsWith('.'))
return;
// load image
let buff = new Buffer.from(fs.readFileSync(dir + '/' + file));
// convert to base64
let base64data = buff.toString('base64');
// add to `window.icons`
if (file.endsWith('.png'))
icons += `window.icons['${file}'] = "data:image/png;base64,${base64data}";\n`;
else if (file.endsWith('.svg'))
icons += `window.icons['${file}'] = "data:image/svg+xml;base64,${base64data}";\n`;
});
prefix_text += icons + '\n';
}
// -----------------------------------------------
// Concat/merge the JS libraries and save them to ./dist/libs.js
// -----------------------------------------------
{
const lib_paths = require('./libPaths.cjs');
let js = '';
for(let i = 0; i < lib_paths.length; i++){
const file = path.join(__dirname, '../src/lib/', lib_paths[i]);
// js
if(file.endsWith('.js') && !file.endsWith('.min.js')){
let minified_code = await uglifyjs.minify(fs.readFileSync(file).toString(), {mangle: false});
if(minified_code && minified_code.code){
js += minified_code.code;
if(options?.verbose)
console.log('minified: ', file);
}
}else{
js += fs.readFileSync(file);
if(options?.verbose)
console.log('skipped minification: ', file);
}
js += '\n\n\n';
}
prefix_text += js;
}
// -----------------------------------------------
// Webpack understands this code better than I do
// -----------------------------------------------
Object.keys(compilation.assets).forEach((assetName) => {
if (assetName.endsWith('.js')) {
const asset = compilation.assets[assetName];
const originalSource = asset.source();
const newSource = `${prefix_text}\n${originalSource}`;
compilation.assets[assetName] = {
source: () => newSource,
size: () => newSource.length,
};
}
// -----------------------------------------------
// Combine all images into a single js file
// -----------------------------------------------
{
let icons = 'window.icons = [];\n';
fs.readdirSync(dir).forEach(file => {
// skip dotfiles
if (file.startsWith('.'))
return;
// load image
let buff = new Buffer.from(fs.readFileSync(dir + '/' + file));
// convert to base64
let base64data = buff.toString('base64');
// add to `window.icons`
if (file.endsWith('.png'))
icons += `window.icons['${file}'] = "data:image/png;base64,${base64data}";\n`;
else if (file.endsWith('.svg'))
icons += `window.icons['${file}'] = "data:image/svg+xml;base64,${base64data}";\n`;
});
prefix_text += icons + '\n';
}
console.log('END');
callback();
// -----------------------------------------------
// Concat/merge the JS libraries and save them to ./dist/libs.js
// -----------------------------------------------
{
const lib_paths = require('./libPaths.cjs');
let js = '';
for(let i = 0; i < lib_paths.length; i++){
const file = path.join(__dirname, '../src/lib/', lib_paths[i]);
// js
if(file.endsWith('.js') && !file.endsWith('.min.js')){
let minified_code = await uglifyjs.minify(fs.readFileSync(file).toString(), {mangle: false});
if(minified_code && minified_code.code){
js += minified_code.code;
if(options?.verbose)
console.log('minified: ', file);
}
}else{
js += fs.readFileSync(file);
if(options?.verbose)
console.log('skipped minification: ', file);
}
js += '\n\n\n';
}
prefix_text += js;
}
return new webpack.BannerPlugin({
banner: prefix_text,
raw: true,
});
// -----------------------------------------------
// Webpack understands this code better than I do
// -----------------------------------------------
// Object.keys(compilation.assets).forEach((assetName) => {
// if (assetName.endsWith('.js')) {
// const asset = compilation.assets[assetName];
// const originalSource = asset.source();
// const newSource = `${prefix_text}\n${originalSource}`;
// compilation.assets[assetName] = {
// source: () => newSource,
// size: () => newSource.length,
// };
// }
// });
console.log('END');
};