/**

  • 生成 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

给这个函数加中文注释:generate 		const chunkGraph compilation chunk = this;		const 			runtimeTemplate			outputOptions 				chunkLoadingGlobal				hotUpdateGlobal				crossOriginLoading				scriptType					 = compil

原文地址: https://www.cveoy.top/t/topic/hiuD 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录