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'); const BaseConfig = require('./webpack/BaseConfig.cjs');
module.exports = { module.exports = async () => ({
...BaseConfig({ env: 'dev' }), ...(await BaseConfig({ env: 'dev' })),
optimization: { optimization: {
minimize: false minimize: false
}, },
}; });

View File

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

View File

@ -1,78 +1,80 @@
const fs = require('fs'); const fs = require('fs');
const path = require('path'); const path = require('path');
const uglifyjs = require('uglify-js'); const uglifyjs = require('uglify-js');
const webpack = require('webpack');
module.exports = ({ dir, options }) => function () { module.exports = async ({ dir, options }) => {
const compiler = this; let prefix_text = '';
compiler.hooks.emit.tapAsync('EmitPlugin', async (compilation, callback) => { prefix_text += `window.gui_env="${options.env}";\n`;
let prefix_text = '';
prefix_text += `window.gui_env="${options.env}";\n`;
// ----------------------------------------------- // -----------------------------------------------
// Combine all images into a single js file // Combine all images into a single js file
// ----------------------------------------------- // -----------------------------------------------
{ {
let icons = 'window.icons = [];\n'; let icons = 'window.icons = [];\n';
fs.readdirSync(dir).forEach(file => { fs.readdirSync(dir).forEach(file => {
// skip dotfiles // skip dotfiles
if (file.startsWith('.')) if (file.startsWith('.'))
return; return;
// load image // load image
let buff = new Buffer.from(fs.readFileSync(dir + '/' + file)); let buff = new Buffer.from(fs.readFileSync(dir + '/' + file));
// convert to base64 // convert to base64
let base64data = buff.toString('base64'); let base64data = buff.toString('base64');
// add to `window.icons` // add to `window.icons`
if (file.endsWith('.png')) if (file.endsWith('.png'))
icons += `window.icons['${file}'] = "data:image/png;base64,${base64data}";\n`; icons += `window.icons['${file}'] = "data:image/png;base64,${base64data}";\n`;
else if (file.endsWith('.svg')) else if (file.endsWith('.svg'))
icons += `window.icons['${file}'] = "data:image/svg+xml;base64,${base64data}";\n`; 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,
};
}
}); });
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');
}; };