* Applies the plugin by registering its hooks on the compiler. * @param {Compiler} compiler the compiler instance * @returns {void}
(compiler)
| 111 | * @returns {void} |
| 112 | */ |
| 113 | apply(compiler) { |
| 114 | const cache = compiler.getCache(PLUGIN_NAME); |
| 115 | /** @type {FileSystemInfo} */ |
| 116 | let fileSystemInfo; |
| 117 | /** @type {SnapshotOptions | undefined} */ |
| 118 | let snapshotOptions; |
| 119 | let realResolves = 0; |
| 120 | let cachedResolves = 0; |
| 121 | let cacheInvalidResolves = 0; |
| 122 | let concurrentResolves = 0; |
| 123 | compiler.hooks.thisCompilation.tap(PLUGIN_NAME, (compilation) => { |
| 124 | snapshotOptions = compilation.options.snapshot.resolve; |
| 125 | fileSystemInfo = compilation.fileSystemInfo; |
| 126 | compilation.hooks.finishModules.tap(PLUGIN_NAME, () => { |
| 127 | if (realResolves + cachedResolves > 0) { |
| 128 | const logger = compilation.getLogger(`webpack.${PLUGIN_NAME}`); |
| 129 | logger.log( |
| 130 | `${Math.round( |
| 131 | (100 * realResolves) / (realResolves + cachedResolves) |
| 132 | )}% really resolved (${realResolves} real resolves with ${cacheInvalidResolves} cached but invalid, ${cachedResolves} cached valid, ${concurrentResolves} concurrent)` |
| 133 | ); |
| 134 | realResolves = 0; |
| 135 | cachedResolves = 0; |
| 136 | cacheInvalidResolves = 0; |
| 137 | concurrentResolves = 0; |
| 138 | } |
| 139 | }); |
| 140 | }); |
| 141 | |
| 142 | /** @typedef {(err?: Error | null, resolveRequest?: ResolveRequest | null) => void} Callback */ |
| 143 | /** @typedef {ResolveRequest & { _ResolverCachePluginCacheMiss: true }} ResolveRequestWithCacheMiss */ |
| 144 | |
| 145 | /** |
| 146 | * Processes the provided item cache. |
| 147 | * @param {ItemCacheFacade} itemCache cache |
| 148 | * @param {Resolver} resolver the resolver |
| 149 | * @param {ResolveContext} resolveContext context for resolving meta info |
| 150 | * @param {ResolveRequest} request the request info object |
| 151 | * @param {Callback} callback callback function |
| 152 | * @returns {void} |
| 153 | */ |
| 154 | const doRealResolve = ( |
| 155 | itemCache, |
| 156 | resolver, |
| 157 | resolveContext, |
| 158 | request, |
| 159 | callback |
| 160 | ) => { |
| 161 | realResolves++; |
| 162 | const newRequest = |
| 163 | /** @type {ResolveRequestWithCacheMiss} */ |
| 164 | ({ |
| 165 | _ResolverCachePluginCacheMiss: true, |
| 166 | ...request |
| 167 | }); |
| 168 | /** @type {ResolveContext} */ |
| 169 | const newResolveContext = { |
| 170 | ...resolveContext, |