summaryrefslogtreecommitdiff
path: root/config/webpack.config.js
diff options
context:
space:
mode:
Diffstat (limited to 'config/webpack.config.js')
-rw-r--r--config/webpack.config.js64
1 files changed, 52 insertions, 12 deletions
diff --git a/config/webpack.config.js b/config/webpack.config.js
index 639de770fd8..05a217c04fe 100644
--- a/config/webpack.config.js
+++ b/config/webpack.config.js
@@ -117,23 +117,18 @@ if (IS_EE) {
});
}
-// if there is a compiled DLL with a matching hash string, use it
let dll;
if (VENDOR_DLL && !IS_PRODUCTION) {
const dllHash = vendorDllHash();
const dllCachePath = path.join(ROOT_PATH, `tmp/cache/webpack-dlls/${dllHash}`);
- if (fs.existsSync(dllCachePath)) {
- console.log(`Using vendor DLL found at: ${dllCachePath}`);
- dll = {
- manifestPath: path.join(dllCachePath, 'vendor.dll.manifest.json'),
- cacheFrom: dllCachePath,
- cacheTo: path.join(ROOT_PATH, `public/assets/webpack/dll.${dllHash}/`),
- publicPath: `dll.${dllHash}/vendor.dll.bundle.js`,
- };
- } else {
- console.log(`Warning: No vendor DLL found at: ${dllCachePath}. DllPlugin disabled.`);
- }
+ dll = {
+ manifestPath: path.join(dllCachePath, 'vendor.dll.manifest.json'),
+ cacheFrom: dllCachePath,
+ cacheTo: path.join(ROOT_PATH, `public/assets/webpack/dll.${dllHash}/`),
+ publicPath: `dll.${dllHash}/vendor.dll.bundle.js`,
+ exists: null,
+ };
}
module.exports = {
@@ -314,6 +309,51 @@ module.exports = {
jQuery: 'jquery',
}),
+ // if DLLs are enabled, detect whether the DLL exists and create it automatically if necessary
+ dll && {
+ apply(compiler) {
+ compiler.hooks.beforeCompile.tapAsync('DllAutoCompilePlugin', (params, callback) => {
+ if (dll.exists) {
+ callback();
+ } else if (fs.existsSync(dll.manifestPath)) {
+ console.log(`Using vendor DLL found at: ${dll.cacheFrom}`);
+ dll.exists = true;
+ callback();
+ } else {
+ console.log(
+ `Warning: No vendor DLL found at: ${dll.cacheFrom}. Compiling DLL automatically.`,
+ );
+
+ const dllConfig = require('./webpack.vendor.config.js');
+ const dllCompiler = webpack(dllConfig);
+
+ dllCompiler.run((err, stats) => {
+ if (err) {
+ return callback(err);
+ }
+
+ const info = stats.toJson();
+
+ if (stats.hasErrors()) {
+ console.error(info.errors.join('\n\n'));
+ return callback('DLL not compiled successfully.');
+ }
+
+ if (stats.hasWarnings()) {
+ console.warn(info.warnings.join('\n\n'));
+ console.warn('DLL compiled with warnings.');
+ } else {
+ console.log('DLL compiled successfully.');
+ }
+
+ dll.exists = true;
+ callback();
+ });
+ }
+ });
+ },
+ },
+
// reference our compiled DLL modules
dll &&
new webpack.DllReferencePlugin({