mirror of https://github.com/webpack/webpack.git
				
				
				
			
		
			
				
	
	
		
			121 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			121 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
| /*
 | |
| 	MIT License http://www.opensource.org/licenses/mit-license.php
 | |
| 	Author Sean Larkin @thelarkinn
 | |
| */
 | |
| var EntrypointsOverSizeLimitWarning = require("./EntrypointsOverSizeLimitWarning");
 | |
| var AssetsOverSizeLimitWarning = require("./AssetsOverSizeLimitWarning");
 | |
| var NoAsyncChunksWarning = require("./NoAsyncChunksWarning");
 | |
| 
 | |
| function SizeLimitsPlugin(options) {
 | |
| 	this.hints = options.hints;
 | |
| 	this.maxAssetSize = options.maxAssetSize;
 | |
| 	this.maxEntrypointSize = options.maxEntrypointSize;
 | |
| 	this.assetFilter = options.assetFilter;
 | |
| }
 | |
| 
 | |
| module.exports = SizeLimitsPlugin;
 | |
| 
 | |
| SizeLimitsPlugin.prototype.apply = function(compiler) {
 | |
| 	var entrypointSizeLimit = this.maxEntrypointSize;
 | |
| 	var assetSizeLimit = this.maxAssetSize;
 | |
| 	var hints = this.hints;
 | |
| 	var assetFilter = this.assetFilter || function(asset) {
 | |
| 		return !(/\.map$/.test(asset))
 | |
| 	};
 | |
| 
 | |
| 	compiler.plugin("after-emit", function(compilation, callback) {
 | |
| 		var warnings = [];
 | |
| 
 | |
| 		var getEntrypointSize = function(entrypoint) {
 | |
| 			var files = entrypoint.getFiles();
 | |
| 
 | |
| 			return files
 | |
| 				.filter(assetFilter)
 | |
| 				.map(function(file) {
 | |
| 					return compilation.assets[file];
 | |
| 				})
 | |
| 				.filter(Boolean)
 | |
| 				.map(function(asset) {
 | |
| 					return asset.size()
 | |
| 				})
 | |
| 				.reduce(function(currentSize, nextSize) {
 | |
| 					return currentSize + nextSize
 | |
| 				}, 0);
 | |
| 		};
 | |
| 
 | |
| 		var assetsOverSizeLimit = [];
 | |
| 		Object.keys(compilation.assets)
 | |
| 			.filter(assetFilter)
 | |
| 			.forEach(function(assetName) {
 | |
| 				var asset = compilation.assets[assetName];
 | |
| 				var size = asset.size();
 | |
| 
 | |
| 				if(size > assetSizeLimit) {
 | |
| 					assetsOverSizeLimit.push({
 | |
| 						name: assetName,
 | |
| 						size: size
 | |
| 					});
 | |
| 					asset.isOverSizeLimit = true;
 | |
| 				}
 | |
| 			});
 | |
| 
 | |
| 		var entrypointsOverLimit = [];
 | |
| 		Object.keys(compilation.entrypoints)
 | |
| 			.forEach(function(key) {
 | |
| 				var entry = compilation.entrypoints[key];
 | |
| 				var size = getEntrypointSize(entry, compilation);
 | |
| 
 | |
| 				if(size > entrypointSizeLimit) {
 | |
| 					entrypointsOverLimit.push({
 | |
| 						name: key,
 | |
| 						size: size,
 | |
| 						files: entry.getFiles().filter(assetFilter)
 | |
| 					});
 | |
| 					entry.isOverSizeLimit = true;
 | |
| 				}
 | |
| 			});
 | |
| 
 | |
| 		if(hints) {
 | |
| 			// 1. Individual Chunk: Size < 250kb
 | |
| 			// 2. Collective Initial Chunks [entrypoint] (Each Set?): Size < 250kb
 | |
| 			// 3. No Async Chunks
 | |
| 			// if !1, then 2, if !2 return
 | |
| 			if(assetsOverSizeLimit.length > 0) {
 | |
| 				warnings.push(
 | |
| 					new AssetsOverSizeLimitWarning(
 | |
| 						assetsOverSizeLimit,
 | |
| 						assetSizeLimit
 | |
| 					)
 | |
| 				);
 | |
| 			}
 | |
| 			if(entrypointsOverLimit.length > 0) {
 | |
| 				warnings.push(
 | |
| 					new EntrypointsOverSizeLimitWarning(
 | |
| 						entrypointsOverLimit,
 | |
| 						entrypointSizeLimit
 | |
| 					)
 | |
| 				);
 | |
| 			}
 | |
| 
 | |
| 			if(warnings.length > 0) {
 | |
| 				var hasAsyncChunks = compilation.chunks.filter(function(chunk) {
 | |
| 					return !chunk.isInitial();
 | |
| 				}).length > 0;
 | |
| 
 | |
| 				if(!hasAsyncChunks) {
 | |
| 					warnings.push(new NoAsyncChunksWarning());
 | |
| 				}
 | |
| 
 | |
| 				if(hints === "error") {
 | |
| 					Array.prototype.push.apply(compilation.errors, warnings);
 | |
| 				} else {
 | |
| 					Array.prototype.push.apply(compilation.warnings, warnings);
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		callback();
 | |
| 	});
 | |
| 
 | |
| };
 |