对导出的 JSON 格式 webpack 配置文件进行结构检查、检测已弃用的 loader/plugin、发现优化缺口并遵循最佳实践。适用于审计阶段。
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:
bash
node -e "console.log(JSON.stringify(require('./webpack.config.js')))" > config.json
python3 scripts/webpack_config_validator.py validate config.json
bash
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
bash
python3 scripts/webpack_config_validator.py check config.json
python3 scripts/webpack_config_validator.py check config.json --format summary
bash
python3 scripts/webpack_config_validator.py explain config.json
python3 scripts/webpack_config_validator.py explain config.json --format json
bash
python3 scripts/webpack_config_validator.py suggest config.json
python3 scripts/webpack_config_validator.py suggest config.json --format json
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
RuleSeverityDescriptionS1errorFile not found or unreadableS2errorEmpty config fileS3errorInvalid JSON syntaxS4errorMissing required fields (entry, output)S5warning/infoUnknown or deprecated top-level keys
RuleSeverityDescriptionE1errorEmpty entry point (empty string, object, or array)E2errorOutput section missing 'path' propertyE3warningOutput filename without content hash in production modeE4warningpublicPath not set
RuleSeverityDescriptionM1warningModule rule without 'test' patternM2warningDuplicate loader for same test patternM3warningDeprecated loaders (raw-loader, url-loader, file-loader, json-loader)M4infoNo babel-loader/ts-loader/esbuild-loader/swc-loader for JS/TS
RuleSeverityDescriptionP1errorDeprecated plugins (UglifyJsPlugin, ExtractTextPlugin, CommonsChunkPlugin)P2warningDuplicate plugin instancesP3infoHtmlWebpackPlugin without explicit templateP4warningMiniCssExtractPlugin without corresponding loader in rules
RuleSeverityDescriptionO1infoMissing splitChunks configurationO2infoMissing custom minimizer configurationO3warning/infodevtool set to eval or source-map in production mode
RuleSeverityDescriptionB1infoMissing resolve.extensionsB2warningHardcoded absolute filesystem paths in configB3warningNo mode set (development/production/none)B4infoMissing devServer configuration
CodeMeaning0No errors (warnings allowed unless --strict)1Errors found (or warnings in --strict mode)2File not found / parse error
yaml
# 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
text
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