Webpack Config Validator

Other

Validate JSON-exported webpack configuration files for structural issues, deprecated loaders/plugins, optimization gaps, and best practices. Use when auditing webpack configs, preparing production builds, or enforcing CI standards.

Install

openclaw skills install webpack-config-validator

Webpack Config Validator

Validate webpack configuration files exported as JSON for structural correctness, entry/output issues, deprecated loaders and plugins, optimization configuration, and best practices. Pure Python 3 stdlib — no external dependencies.

Note: webpack configs are JS/TS, not directly parseable. This validator works with JSON-exported configs. Export via:

node -e "console.log(JSON.stringify(require('./webpack.config.js')))" > config.json
python3 scripts/webpack_config_validator.py validate config.json

Commands

validate — Full validation with all rules

python3 scripts/webpack_config_validator.py validate config.json
python3 scripts/webpack_config_validator.py validate config.json --strict
python3 scripts/webpack_config_validator.py validate config.json --format json --mode production

check — Quick check (errors and warnings only)

python3 scripts/webpack_config_validator.py check config.json
python3 scripts/webpack_config_validator.py check config.json --format summary

explain — Show all rules with descriptions

python3 scripts/webpack_config_validator.py explain config.json
python3 scripts/webpack_config_validator.py explain config.json --format json

suggest — Run validation and propose fixes

python3 scripts/webpack_config_validator.py suggest config.json
python3 scripts/webpack_config_validator.py suggest config.json --format json

Flags

FlagDescription
--strictTreat warnings as errors — exit code 1 (CI-friendly)
--format textHuman-readable output (default)
--format jsonMachine-readable JSON
--format summaryCompact summary with counts
--mode productionOverride mode context for mode-specific rules (E3, O3)
--mode developmentOverride mode context for mode-specific rules

Validation Rules (24)

Structure (5)

RuleSeverityDescription
S1errorFile not found or unreadable
S2errorEmpty config file
S3errorInvalid JSON syntax
S4errorMissing required fields (entry, output)
S5warning/infoUnknown or deprecated top-level keys

Entry/Output (4)

RuleSeverityDescription
E1errorEmpty entry point (empty string, object, or array)
E2errorOutput section missing 'path' property
E3warningOutput filename without content hash in production mode
E4warningpublicPath not set

Module/Rules (4)

RuleSeverityDescription
M1warningModule rule without 'test' pattern
M2warningDuplicate loader for same test pattern
M3warningDeprecated loaders (raw-loader, url-loader, file-loader, json-loader)
M4infoNo babel-loader/ts-loader/esbuild-loader/swc-loader for JS/TS

Plugins (4)

RuleSeverityDescription
P1errorDeprecated plugins (UglifyJsPlugin, ExtractTextPlugin, CommonsChunkPlugin)
P2warningDuplicate plugin instances
P3infoHtmlWebpackPlugin without explicit template
P4warningMiniCssExtractPlugin without corresponding loader in rules

Optimization (3)

RuleSeverityDescription
O1infoMissing splitChunks configuration
O2infoMissing custom minimizer configuration
O3warning/infodevtool set to eval or source-map in production mode

Best Practices (4)

RuleSeverityDescription
B1infoMissing resolve.extensions
B2warningHardcoded absolute filesystem paths in config
B3warningNo mode set (development/production/none)
B4infoMissing devServer configuration

Exit Codes

CodeMeaning
0No errors (warnings allowed unless --strict)
1Errors found (or warnings in --strict mode)
2File not found / parse error

CI Integration

# GitHub Actions example
- name: Validate webpack config
  run: |
    node -e "console.log(JSON.stringify(require('./webpack.config.js')))" > /tmp/wp-config.json
    python3 scripts/webpack_config_validator.py validate /tmp/wp-config.json --strict --mode production --format json

Example Output

webpack.config validate — config.json
======================================
[ERROR  ] S4: Missing required top-level field(s): output
         Every webpack config needs at least 'entry' and 'output'.
[WARNING] E4: output.publicPath not set
         Set publicPath to ensure assets are loaded from the correct URL. Common values: '/', '/assets/', 'auto'.
[WARNING] M3: Deprecated loader 'file-loader' in rule 2
         Replace with asset/resource (webpack 5 built-in).
[ERROR  ] P1: Deprecated plugin 'UglifyJsPlugin' at index 0
         Replace with TerserPlugin (terser-webpack-plugin).
[INFO   ] O1: No optimization.splitChunks configuration
         splitChunks enables automatic code splitting for shared dependencies. Add optimization: { splitChunks: { chunks: 'all' } } for better caching.
[WARNING] B3: No 'mode' set (development/production/none)
         Set mode to enable webpack's built-in optimizations. Without mode, webpack defaults to 'production' with a warning.

Result: INVALID
Summary: 2 error(s), 3 warning(s), 1 info