mirror of https://github.com/webpack/webpack.git
				
				
				
			
		
			
				
	
	
		
			68 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			68 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
| /*
 | |
| 	MIT License http://www.opensource.org/licenses/mit-license.php
 | |
| 	Author Tobias Koppers @sokra
 | |
| */
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| const RuntimeGlobals = require("../RuntimeGlobals");
 | |
| const RuntimeModule = require("../RuntimeModule");
 | |
| const Template = require("../Template");
 | |
| 
 | |
| class StartupChunkDependenciesRuntimeModule extends RuntimeModule {
 | |
| 	constructor(asyncChunkLoading) {
 | |
| 		super("startup chunk dependencies");
 | |
| 		this.asyncChunkLoading = asyncChunkLoading;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * @returns {string} runtime code
 | |
| 	 */
 | |
| 	generate() {
 | |
| 		const { chunk, compilation } = this;
 | |
| 		const { chunkGraph, runtimeTemplate } = compilation;
 | |
| 		const chunkIds = Array.from(
 | |
| 			chunkGraph.getChunkEntryDependentChunksIterable(chunk)
 | |
| 		).map(chunk => {
 | |
| 			return chunk.id;
 | |
| 		});
 | |
| 		return Template.asString([
 | |
| 			`var next = ${RuntimeGlobals.startup};`,
 | |
| 			`${RuntimeGlobals.startup} = ${runtimeTemplate.basicFunction(
 | |
| 				"",
 | |
| 				!this.asyncChunkLoading
 | |
| 					? chunkIds
 | |
| 							.map(
 | |
| 								id => `${RuntimeGlobals.ensureChunk}(${JSON.stringify(id)});`
 | |
| 							)
 | |
| 							.concat("return next();")
 | |
| 					: chunkIds.length === 1
 | |
| 					? `return ${RuntimeGlobals.ensureChunk}(${JSON.stringify(
 | |
| 							chunkIds[0]
 | |
| 					  )}).then(next);`
 | |
| 					: chunkIds.length > 2
 | |
| 					? [
 | |
| 							// using map is shorter for 3 or more chunks
 | |
| 							`return Promise.all(${JSON.stringify(chunkIds)}.map(${
 | |
| 								RuntimeGlobals.ensureChunk
 | |
| 							}, __webpack_require__)).then(next);`
 | |
| 					  ]
 | |
| 					: [
 | |
| 							// calling ensureChunk directly is shorter for 0 - 2 chunks
 | |
| 							"return Promise.all([",
 | |
| 							Template.indent(
 | |
| 								chunkIds
 | |
| 									.map(
 | |
| 										id => `${RuntimeGlobals.ensureChunk}(${JSON.stringify(id)})`
 | |
| 									)
 | |
| 									.join(",\n")
 | |
| 							),
 | |
| 							"]).then(next);"
 | |
| 					  ]
 | |
| 			)};`
 | |
| 		]);
 | |
| 	}
 | |
| }
 | |
| 
 | |
| module.exports = StartupChunkDependenciesRuntimeModule;
 |