Skip to content

Conversation

@RabbiIslamRony
Copy link
Member

PR Type

What kind of change does this PR introduce?

  • Bugfix
  • Security fix
  • Improvement
  • New Feature
  • Refactoring (no functional changes, no api changes)
  • Build related changes
  • Text changes
  • Other... Please describe:

Description

Optimizes the Webpack build system to reduce bundle sizes and production zip weight by ~54%.

Problem

  • No externals configured — React, ReactDOM, lodash, and all @wordpress/* packages were re-bundled into output files instead of using WordPress-provided globals.
  • formgent-integration.min.js alone was 1,976 KB because it bundled the entire @wordpress/components library (which pulls in moment.js + moment-timezone).
  • Vue/Vuex were duplicated across admin-multi-directory-builder and admin-settings-manager (~776 KB each).
  • Production build generated both dev (unminified) and minified files — 78 JS files total.
  • Zip included 4,500+ icon SVG source files, assets/src/, and block source code.

Changes

Webpack Config

  • webpack.common.js — Added externals map for jQuery, lodash, React, ReactDOM, and 7 @wordpress/* packages.
  • webpack.prod.js — Added optimization.splitChunks to extract shared Vue vendor code into admin-vue-vendor.min.js; removed redundant dev build; restructured FileManagerPlugin to only copy minified assets and icon font files (no SVGs).
  • webpack.dev.vue.js — Added matching splitChunks config for dev consistency.

PHP

  • includes/asset-loader/scripts.php — Registered new directorist-admin-vue-vendor script; added it as dependency for both Vue admin scripts; updated directorist-formgent-integration deps to declare all externalized WP packages.

Results

Metric Before After Savings
formgent-integration.min.js 1,976 KB 117 KB −94%
admin-multi-directory-builder.min.js 777 KB 573 KB −26%
admin-settings-manager.min.js 776 KB 571 KB −26%
Total minified JS 3.89 MB 1.87 MB −52%
Production JS file count 78 40 −49%
Zip size 14.00 MB 6.48 MB −54%

Testing

  • npx webpack --config webpack.prod.js completes with 0 errors
  • Verify admin Multi-Directory Builder page loads correctly
  • Verify admin Settings Manager page loads correctly
  • Verify frontend Dashboard Enquiries (formgent-integration) works
  • Verify all public-facing pages (listings, search, single listing, etc.)
  • Test RTL layout with minified RTL CSS

Any linked issues

Fixes #

Checklist

…roduction zip

- Add webpack externals for WordPress-provided packages (React, ReactDOM,
  lodash, @wordpress/element, @wordpress/components, @wordpress/api-fetch,
  @wordpress/hooks, @wordpress/i18n, @wordpress/dom-ready, @wordpress/dataviews)
  so they resolve from wp.* globals instead of being re-bundled.

- Add optimization.splitChunks to extract shared Vue/Vuex vendor code into a
  single admin-vue-vendor chunk, eliminating duplication across
  admin-multi-directory-builder and admin-settings-manager.

- Remove redundant dev (unminified) build from webpack.prod.js — dev output
  now only comes from webpack.dev.js and webpack.dev.vue.js where it belongs.

- Restructure FileManagerPlugin copy rules to produce a leaner zip:
  only minified JS/CSS, icon woff2+css (no SVGs), block build output (no src).

- Update PHP script dependencies in scripts.php:
  register admin-vue-vendor as a shared dep for both Vue admin scripts;
  declare all externalized WP packages for formgent-integration.

Results:
  formgent-integration.min.js  1,976 KB → 117 KB  (−94%)
  Total minified JS            3.89 MB → 1.87 MB  (−52%)
  Production JS file count     78      → 40        (−49%)
  Zip size                     14 MB   → 6.48 MB   (−54%)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant