@rws-framework/client
Version:
This package provides the core client-side framework for Realtime Web Suit (RWS), enabling modular, asynchronous web components, state management, and integration with backend services. It is located in `.dev/client`.
121 lines (97 loc) • 3.85 kB
JavaScript
const webpack = require('webpack')
const HtmlWebpackPlugin = require('html-webpack-plugin');
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
const { processEnvDefines } = require('./_env_defines');
const path = require('path');
const fs = require('fs');
const RWS_WEBPACK_PLUGINS_BAG = {
_plugins: [],
add(plugin) {
if (Array.isArray(plugin)) {
if (!plugin.length) {
return;
}
plugin.forEach((item) => {
RWS_WEBPACK_PLUGINS_BAG.add(item);
})
} else {
if (!plugin) {
return;
}
if (!this._plugins.includes(plugin)) {
this._plugins.push(plugin);
}
}
},
getPlugins() {
return this._plugins
}
}
function getPackageModPlugins() {
return [
new webpack.ContextReplacementPlugin(/moment[\/\\]locale$/, /en-gb/),
new webpack.IgnorePlugin({
resourceRegExp: /.*\.es6\.js$/,
contextRegExp: /node_modules/
}),
]
}
function getDefinesPlugins(BuildConfigurator, rwsFrontendConfig, devDebug) {
const _rws_defines = processEnvDefines(BuildConfigurator, rwsFrontendConfig, devDebug);
return [
new webpack.DefinePlugin(_rws_defines)
]
}
function getBuilderDevPlugins(BuildConfigurator, rwsFrontendConfig, devDebug) {
const plugins = [];
if(devDebug?.profiling){
const profiling = new webpack.debug.ProfilingPlugin({
outputPath: path.resolve(BuildConfigurator.get('executionDir'), BuildConfigurator.get('outputDir') || rwsFrontendConfig.outputDir, '.profiling/profileEvents.json'),
});
plugins.push(profiling);
class FileListPlugin {
apply(compiler) {
compiler.hooks.done.tap('FileListPlugin', (stats) => {
const files = [];
stats.compilation.modules.forEach(module => {
if (module.resource) {
files.push(module.resource);
}
});
const output = `// Generated on ${new Date().toISOString()}\n` +
`// Total files processed: ${files.length}\n\n` +
`module.exports = ${JSON.stringify(files, null, 2)};\n`;
const reportPath = path.join(BuildConfigurator.get('executionDir'), 'processed-files.js');
fs.writeFileSync(
reportPath,
output
);
console.log(`\n[FileListPlugin] Saved ${files.length} processed files to ${reportPath}`);
});
}
}
plugins.push(new FileListPlugin());
}
return plugins;
}
function getBuilderOptimPlugins(BuildConfigurator, rwsFrontendConfig) {
return [
]
}
function addStartPlugins(rwsFrontendConfig, BuildConfigurator, devDebug, isHotReload, isReport) {
RWS_WEBPACK_PLUGINS_BAG.add([
...getDefinesPlugins(BuildConfigurator, rwsFrontendConfig, devDebug),
...getBuilderDevPlugins(BuildConfigurator, rwsFrontendConfig, devDebug),
...getBuilderOptimPlugins(BuildConfigurator, rwsFrontendConfig),
...getPackageModPlugins()
]);
const overridePlugins = rwsFrontendConfig.plugins || []
RWS_WEBPACK_PLUGINS_BAG.add(overridePlugins);
if (isReport) {
RWS_WEBPACK_PLUGINS_BAG.add(new BundleAnalyzerPlugin({
analyzerMode: 'static',
openAnalyzer: false,
}));
}
}
module.exports = { RWS_WEBPACK_PLUGINS_BAG, addStartPlugins };