给这个函数加中文注释:generate const chunkGraph compilation chunk = this; const runtimeTemplate outputOptions chunkLoadingGlobal hotUpdateGlobal crossOriginLoading scriptType = compil
/**
-
生成 JSONP 加载 chunk 的函数
-
@returns {string} 返回生成的函数代码 */ generate() { // 从 this 中获取 chunkGraph, compilation, chunk const { chunkGraph, compilation, chunk } = this;
// 从 compilation 中获取 runtimeTemplate, chunkLoadingGlobal, hotUpdateGlobal, crossOriginLoading 和 scriptType const { runtimeTemplate, outputOptions: { chunkLoadingGlobal, hotUpdateGlobal, crossOriginLoading, scriptType } } = compilation;
// 获取全局对象 const globalObject = runtimeTemplate.globalObject;
// 获取 linkPreload 和 linkPrefetch const { linkPreload, linkPrefetch } = JsonpChunkLoadingRuntimeModule.getCompilationHooks(compilation);
// 获取 RuntimeGlobals 中的常量 const fn = RuntimeGlobals.ensureChunkHandlers; const withBaseURI = this._runtimeRequirements.has(RuntimeGlobals.baseURI); const withLoading = this._runtimeRequirements.has( RuntimeGlobals.ensureChunkHandlers ); const withCallback = this._runtimeRequirements.has( RuntimeGlobals.chunkCallback ); const withOnChunkLoad = this._runtimeRequirements.has( RuntimeGlobals.onChunksLoaded ); const withHmr = this._runtimeRequirements.has( RuntimeGlobals.hmrDownloadUpdateHandlers ); const withHmrManifest = this._runtimeRequirements.has( RuntimeGlobals.hmrDownloadManifest ); const withPrefetch = this._runtimeRequirements.has( RuntimeGlobals.prefetchChunkHandlers ); const withPreload = this._runtimeRequirements.has( RuntimeGlobals.preloadChunkHandlers );
// 获取 chunkLoadingGlobalExpr 和 hasJsMatcher const chunkLoadingGlobalExpr =
${globalObject}[${JSON.stringify( chunkLoadingGlobal )}]; const conditionMap = chunkGraph.getChunkConditionMap(chunk, chunkHasJs); const hasJsMatcher = compileBooleanMatcher(conditionMap);// 获取 initialChunkIds 和 stateExpression const initialChunkIds = getInitialChunkIds(chunk, chunkGraph, chunkHasJs); const stateExpression = withHmr ?
${RuntimeGlobals.hmrRuntimeStatePrefix}_jsonp: undefined;// 返回生成的函数代码 return Template.asString([ withBaseURI ? Template.asString([
${RuntimeGlobals.baseURI} = document.baseURI || self.location.href;]) : "// no baseURI", "", "// object to store loaded and loading chunks", "// undefined = chunk not loaded, null = chunk preloaded/prefetched", "// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded",var installedChunks = ${ stateExpression ?${stateExpression} = ${stateExpression} ||: "" }{, Template.indent( Array.from(initialChunkIds, id =>${JSON.stringify(id)}: 0).join( ",\n" ) ), "};", "", withLoading ? Template.asString([ `${fn}.j = ${runtimeTemplate.basicFunction
原文地址: https://www.cveoy.top/t/topic/hiuD 著作权归作者所有。请勿转载和采集!