/** * @license * Copyright Google Inc. All Rights Reserved. * * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.io/license */ import { Compiler, compilation } from 'webpack'; import { HashFormat } from '../models/webpack-configs/utils'; export interface RemoveHashPluginOptions { chunkNames: string[]; hashFormat: HashFormat; } export class RemoveHashPlugin { constructor(private options: RemoveHashPluginOptions) {} apply(compiler: Compiler): void { compiler.hooks.compilation.tap('remove-hash-plugin', compilation => { const mainTemplate = compilation.mainTemplate as compilation.MainTemplate & { hooks: compilation.CompilationHooks; }; mainTemplate.hooks.assetPath.tap( 'remove-hash-plugin', (path: string, data: { chunk?: { name: string } }) => { const chunkName = data.chunk && data.chunk.name; const { chunkNames, hashFormat } = this.options; if (chunkName && chunkNames.includes(chunkName)) { // Replace hash formats with empty strings. return path .replace(hashFormat.chunk, '') .replace(hashFormat.extract, ''); } return path; } ); }); } }