webpack@4.46.0 辅助信息

194 阅读2分钟

compilation.seal中逻辑梳理,目的是找到有效主流程逻辑

未用到:表示内置没有注册的插件

seal: 钩子和调用可能的注册和功能
hooks.sealWarnCaseSersitiveModulesPlugin
hooks.optimizeDependenciesBasic,
hooks.optimizeDependencies,
hooks.optimizeDependenciesAdvanced
1. 未用到
2. FlagAllModulesAsUsedPlugin、FlagDependencyUsagePlugin、SideEffectsFlagPlugin (普通模式下没有用到 - 非必须- 优化策略应该)
3. 未用到
hooks.afterOptimizeDependencies未用到
hooks.beforeChunks未用到
构造初始ChunkGroupsh和EntryPoints_preparedEntrypoints
new EntryPoint()等
buildChunkGraph由module-graph 初步构造 chunk-graph
sortModules()
hooks.afterChunksWebAssemblyModulesPlugin
hooks.optimizeAggressiveSplittingPlugin
hooks.optimizeModulesBasic,
hooks.optimizeModules,
hooks.optimizeModulesAdvanced
1. 未用到 ,
2. 未用到 ,
3. 未用到
hooks.afterOptimizeModules未用到
hooks.optimizeChunksBasic,
hooks.optimizeChunks,
hooks.optimizeChunksAdvanced
1. EnsureChunkConditionsPlugin、MergeDuplicateChunksPlugin、RemoveEmptyChunksPlugin、RemoveParentModulesPlugin
2. 未用到
3. RemoveEmptyChunksPlugin、AggressiveMergingPlugin、AggressiveSplittingPlugin、LimitChunkCountPlugin、MinChunkSizePlugin、RuntimeChunkPlugin、 SplitChunksPlugin
hooks.afterOptimizeChunksFlagInitialModulesAsUsedPlugin
hooks.optimizeTree未用到

hooks.optimizeTree 回调中的逻辑

标题
hooks.afterOptimizeTree未用到: 表示webpack内部没有任何订阅
hooks.optimizeChunkModulesBasic、hooks.optimizeChunkModules、hooks.optimizeChunkModulesAdvanced1. 未用到
2. ModuleConcatenationPlugin
3. 未用到
hooks.afterOptimizeChunkModules未用到
hooks.reviveModulescompilation.hooks.reviveModules.tap( "RecordIdsPlugin",
hooks.optimizeModuleOrderOccurrenceOrderPlugin OccurrenceOrderModuleIdsPlugin 普通模式下未用到
hooks.advancedOptimizeModuleOrder未用到
hooks.beforeModuleIds未用到
hooks.moduleIds未用到
ChunkModuleIdRangePlugin
applyModuleIds()
hooks.optimizeModuleIds未用到
hooks.afterOptimizeModuleIds未用到
sortItemsWithModuleIds()
hooks.reviveChunksRecordIdsPlugin
hooks.optimizeChunkOrderNaturalChunkOrderPlugin 有用到
OccurrenceOrderPlugin
OccurrenceOrderModuleIdsPlugin
hooks.beforeChunkIdsNamedChunksPlugin
applyChunkIds()
hooks.optimizeChunkIdsFlagIncludedChunksPlugin
hooks.afterOptimizeChunkIds未用到
sortItemsWithChunkIds()
hooks.beforeHash未用到
createHash()1. …
2. JavascriptModulesPlugin.hooks.contentHash
hooks.afterHashHotModuleReplacementPlugin
hooks.beforeModuleAssets未用到
createModuleAssets()NormalModule提供的loaderContext有emitFile,loader可以通过该接口将资源输出,此时并没有真正的输出文件,只是记录到 module.buildInfo.assets 中

这里的逻辑就是遍历所有的模块,将每个模块在loader阶段输出的文件添加到(调用compilation.emitAsset())compilation.assets中,统一走compilation的文件输出

file-loader中就有用到该emitFile接口,然后会进入 createModuleAssets() 中…
hooks.shouldGenerateChunkAssets、hooks.beforeChunkAssetsHotModuleReplacementPlugin
shouldGenerateChunkAssets
createChunkAssets()生成Chunk内容 保存到 compilation.assets中
hooks.additionalChunkAssetsHotModuleReplacementPlugin
summarizeDependencies()
hooks.additionalAssets该钩子的回调中的钩子
hooks.optimizeChunkAssets - BannerPlugin
hooks.afterOptimizeChunkAssets - SourceMapDevToolPlugin
hooks.optimizeAssets - 无
hooks.afterOptimizeAssets - 无
hooks.needAdditionalSeal - AggressiveSplittingPlugin
hooks.afterSeal - 无

所有插件??

WebpackOptionsApply中涉及的插件

插件条件备注
FetchCompileWasmTemplatePluginoptions.target = 'web
LoaderTargetPluginoptions.target = 'web 给loaderContext设置target
LibraryTemplatePluginoutput.library
ExternalsPluginexternals
EvalSourceMapDevToolPluginSourceMapDevToolPlugin
EvalDevToolModulePlugindevtool.includes("eval")
SizeLimitsPluginperformance
NodeStuffPluginoptions.node !== false parser相关;node相关忽略
WebAssemblyModulesPluginy
RecordIdsPluginy
WarnCaseSensitiveModulesPluginy
LoaderPluginy 关注
EnsureChunkConditionsPluginy hooks.optimizeChunksBasic、optimizeExtractedChunksBasic
NodeSourcePluginoptions.target = 'web parser相关,作用是?
EntryOptionPluginy compiler.hooks.entryOption.call(options.context, options.entry);---
UseStrictPluginy parser相关;use strict
CompatibilityPluginy parser相关;支持 Browserify风格的require(file, opts)
RequireIncludePluginy parser相关;RequireIncludeDependencyParserPlugin; webpack提供的require.include
RequireEnsurePluginy parser相关;RequireEnsureDependenciesBlockParserPlugin; webpack提供的require.ensure
RequireContextPluginy parser相关;RequireContextDependencyParserPlugin; webpack提供require.context---
SystemPluginy parser相关;关注 模块定义系统;libraryTarget: 'system'
ImportPluginy parser相关;ImportParserPlugin;import()
HarmonyModulesPluginy parser相关,HarmonyDetectionParserPlugin、HarmonyImportDependencyParserPlugin、HarmonyExportDependencyParserPlugin、HarmonyTopLevelThisParserPlugin;es6规范
AMDPluginRequireJsStuffPluginoptions.amd !== false
CommonJsPluginy parser相关;RequireResolveDependencyParserPlugin、CommonJsRequireDependencyParserPlugin;commonjs简写规范(cjs)
CommonJsStuffPluginy parser相关;cjs规范?;模块变量 :module.loaded、module.id等等
APIPluginy parser相关;模块变量 webpack_require、__webpack_public_path__等
JsonModulesPluginy createParser & creatGengerator
JavascriptModulesPluginy 代码生成;
FunctionModulePluginoptions.target = 'web 代码生成;FunctionModuleTemplatePlugin
JsonpTemplatePluginoptions.target = 'web 代码生成 ;JsonpMainTemplatePlugin、JsonpChunkTemplatePlugin
TemplatedPathPluginy 模板路径❓

optimization相关的插件

插件条件备注
RemoveParentModulesPluginoptimization.removeAvailableModules
RemoveEmptyChunksPluginoptimization.removeEmptyChunks
MergeDuplicateChunksPluginoptimization.mergeDuplicateChunks
FlagIncludedChunksPluginoptimization.flagIncludedChunks
SideEffectsFlagPluginoptimization.sideEffects
FlagDependencyExportsPluginoptimization.providedExports
FlagDependencyUsagePluginoptimization.usedExports
ModuleConcatenationPluginoptimization.concatenateModules
SplitChunksPluginoptimization.splitChunks
RuntimeChunkPluginoptimization.runtimeChunk
NoEmitOnErrorsPluginoptimization.noEmitOnErrors
WasmFinalizeExportsPluginoptimization.checkWasmTypes
HashedModuleIdsPluginmoduleIds="hashed"
OccurrenceModuleOrderPluginoptimization.occurrenceOrder => moduleIds="size" {prioritiseInitial: true}
NamedModulesPluginoptimization.namedModules => moduleIds="named"
OccurrenceModuleOrderPluginmoduleIds"total-size" {prioritiseInitial: false}
NaturalChunkOrderPluginchunkIds="natural"
OccurrenceChunkOrderPlugin && NamedChunksPluginchunkIds="named"
OccurrenceChunkOrderPluginchunkIds="size" {prioritiseInitial: true}
OccurrenceChunkOrderPluginchunkIds="total-size" {prioritiseInitial: false}
DefinePluginnodeEnv
minimizer.call/applyminimizer in minimizer