/
githubmirror
/
wp-calypso
Обзор
Документация
Войти
/
githubmirror
/
wp-calypso
Код
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
trunk
build-tools/webpack/require-chunk-callback-plugin.js
92 строки
2 KB
Omar Alshaker
Calypso Build and Start time improvements (#111509)
10 июн 2026, 20:12
Не верифицирован
10 июн 2026, 20:12
abf1fb4
Код
Авторство
О чём код?
const webpack = require( 'webpack' ); const { Template } = webpack; /** * Plugin name. * @type {string} */ const PLUGIN_NAME = 'RequireChunkCallback'; class RequireChunkCallbackPlugin { apply( compiler ) { compiler.hooks.thisCompilation.tap( PLUGIN_NAME, ( compilation ) => { const { mainTemplate } = compilation; const chunkIdToURL = webpack.RuntimeGlobals.getChunkScriptFilename; mainTemplate.hooks.localVars.tap( PLUGIN_NAME, ( source ) => { return Template.asString( [ source, '', ` // Array to store all loading or loaded chunks var _installedChunks = []; function RequireChunkCallback() { this.callbacks = []; } RequireChunkCallback.prototype.add = function( callback ) { this.callbacks.push( callback ); return this; }; RequireChunkCallback.prototype.remove = function( callback ) { this.callbacks = this.callbacks.filter( function( _callback ) { return callback !== _callback; } ); return this; }; RequireChunkCallback.prototype.trigger = function( chunk, promises, publicPath ) { for ( var i = 0; i < this.callbacks.length; i++ ) { this.callbacks[ i ]( chunk, promises, publicPath ); } return this; }; RequireChunkCallback.prototype.getInstalledChunks = function() { return _installedChunks.map( function( chunkId ) { return ${ chunkIdToURL }( chunkId ) .replace( __webpack_require__.p, '' ) .replace( /\\.js$/, '' ); } ); }; RequireChunkCallback.prototype.getPublicPath = function() { return __webpack_require__.p; }; var requireChunkCallback = new RequireChunkCallback(); var globalScope = typeof globalThis !== 'undefined' ? globalThis : self; // When webpack executes CSS modules in Node window is not defined, so we need to add a global variable to the window object. if ( globalScope.window ) { globalScope.window.__requireChunkCallback__ = requireChunkCallback; } `, ] ); } ); mainTemplate.hooks.requireEnsure.tap( PLUGIN_NAME, ( source ) => { return Template.asString( [ source, '', `requireChunkCallback.trigger( { chunkId: chunkId, publicPath: __webpack_require__.p, scriptSrc: ${ chunkIdToURL }( chunkId ) }, promises ); _installedChunks.push( chunkId );`, ] ); } ); } ); } } module.exports = RequireChunkCallbackPlugin;