mirror of https://github.com/webpack/webpack.git
				
				
				
			
							parent
							
								
									99396be94c
								
							
						
					
					
						commit
						bfc1359a86
					
				|  | @ -120,6 +120,8 @@ function MainTemplate(outputOptions) { | |||
| 		buf.push("// define getter function for harmory exports"); | ||||
| 		buf.push(this.requireFn + ".d = function(exports, name, getter) {"); | ||||
| 		buf.push(this.indent([ | ||||
| 			"if(!" + this.requireFn + ".o(exports, name)) {", | ||||
| 			this.indent([ | ||||
| 				"Object.defineProperty(exports, name, {", | ||||
| 				this.indent([ | ||||
| 					"configurable: false,", | ||||
|  | @ -127,6 +129,8 @@ function MainTemplate(outputOptions) { | |||
| 					"get: getter" | ||||
| 				]), | ||||
| 				"});" | ||||
| 			]), | ||||
| 			"}" | ||||
| 		])); | ||||
| 		buf.push("};"); | ||||
| 
 | ||||
|  |  | |||
|  | @ -30,7 +30,7 @@ HarmonyExportImportedSpecifierDependency.prototype.getReference = function() { | |||
| 		// export *
 | ||||
| 		if(Array.isArray(this.originModule.usedExports)) { | ||||
| 			// reexport * with known used exports
 | ||||
| 			var activeExports = HarmonyModulesHelpers.getActiveExports(this.originModule); | ||||
| 			var activeExports = HarmonyModulesHelpers.getActiveExports(this.originModule, this); | ||||
| 			if(Array.isArray(m.providedExports)) { | ||||
| 				return { | ||||
| 					module: m, | ||||
|  | @ -108,6 +108,14 @@ HarmonyExportImportedSpecifierDependency.prototype.getExports = function() { | |||
| }; | ||||
| 
 | ||||
| HarmonyExportImportedSpecifierDependency.prototype.describeHarmonyExport = function() { | ||||
| 	var importedModule = this.importDependency.module; | ||||
| 	if(!this.name && importedModule && Array.isArray(importedModule.providedExports)) { | ||||
| 		// for a star export and when we know which exports are provided, we can tell so
 | ||||
| 		return { | ||||
| 			exportedName: importedModule.providedExports, | ||||
| 			precedence: 3 | ||||
| 		} | ||||
| 	} | ||||
| 	return { | ||||
| 		exportedName: this.name, | ||||
| 		precedence: this.name ? 2 : 3 | ||||
|  | @ -149,7 +157,7 @@ HarmonyExportImportedSpecifierDependency.Template.prototype.apply = function(dep | |||
| 	} else if(dep.name) { // we want to reexport the module object as named export
 | ||||
| 		content = "/* harmony reexport (module object) */ " + getReexportStatement(JSON.stringify(used), ""); | ||||
| 	} else if(Array.isArray(dep.originModule.usedExports)) { // we know which exports are used
 | ||||
| 		activeExports = HarmonyModulesHelpers.getActiveExports(dep.originModule); | ||||
| 		activeExports = HarmonyModulesHelpers.getActiveExports(dep.originModule, dep); | ||||
| 		items = dep.originModule.usedExports.map(function(id) { | ||||
| 			if(id === "default") return; | ||||
| 			if(activeExports.indexOf(id) >= 0) return; | ||||
|  | @ -164,7 +172,7 @@ HarmonyExportImportedSpecifierDependency.Template.prototype.apply = function(dep | |||
| 			}).join(""); | ||||
| 		} else content = "/* unused harmony namespace reexport */\n"; | ||||
| 	} else if(dep.originModule.usedExports && importedModule && Array.isArray(importedModule.providedExports)) { // not sure which exports are used, but we know which are provided
 | ||||
| 		activeExports = HarmonyModulesHelpers.getActiveExports(dep.originModule); | ||||
| 		activeExports = HarmonyModulesHelpers.getActiveExports(dep.originModule, dep); | ||||
| 		items = importedModule.providedExports.map(function(id) { | ||||
| 			if(id === "default") return; | ||||
| 			if(activeExports.indexOf(id) >= 0) return; | ||||
|  | @ -178,7 +186,7 @@ HarmonyExportImportedSpecifierDependency.Template.prototype.apply = function(dep | |||
| 			}).join(""); | ||||
| 		} else content = "/* empty harmony namespace reexport */\n"; | ||||
| 	} else if(dep.originModule.usedExports) { // not sure which exports are used and provided
 | ||||
| 		activeExports = HarmonyModulesHelpers.getActiveExports(dep.originModule); | ||||
| 		activeExports = HarmonyModulesHelpers.getActiveExports(dep.originModule, dep); | ||||
| 		content = "/* harmony namespace reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in " + name + ") "; | ||||
| 
 | ||||
| 		// Filter out exports which are defined by other exports
 | ||||
|  |  | |||
|  | @ -55,16 +55,26 @@ HarmonyModulesHelpers.isActive = function(module, depInQuestion) { | |||
| 
 | ||||
| // get a list of named exports defined in a module
 | ||||
| // doesn't include * reexports.
 | ||||
| HarmonyModulesHelpers.getActiveExports = function(module) { | ||||
| 	if(module.activeExports) | ||||
| 		return module.activeExports; | ||||
| 	return module.dependencies.reduce(function(arr, dep) { | ||||
| HarmonyModulesHelpers.getActiveExports = function(module, currentDependency) { | ||||
| 	var desc = currentDependency && currentDependency.describeHarmonyExport(); | ||||
| 	var currentIndex = currentDependency ? module.dependencies.indexOf(currentDependency) : -1; | ||||
| 	return module.dependencies.map(function(dep, idx) { | ||||
| 		return { | ||||
| 			dep: dep, | ||||
| 			idx: idx | ||||
| 		} | ||||
| 	}).reduce(function(arr, data) { | ||||
| 		var dep = data.dep; | ||||
| 		if(!dep.describeHarmonyExport) return arr; | ||||
| 		var d = dep.describeHarmonyExport(); | ||||
| 		if(!d) return arr; | ||||
| 		var name = d.exportedName; | ||||
| 		if(!name || arr.indexOf(name) >= 0) return arr; | ||||
| 		if(!desc || (d.precedence < desc.precedence) || (d.precedence === desc.precedence && data.idx < currentIndex)) { | ||||
| 			var names = [].concat(d.exportedName); | ||||
| 			names.forEach(function(name) { | ||||
| 				if(name && arr.indexOf(name) < 0) | ||||
| 					arr.push(name); | ||||
| 			}); | ||||
| 		} | ||||
| 		return arr; | ||||
| 	}, []) | ||||
| 	}, []); | ||||
| }; | ||||
|  |  | |||
|  | @ -0,0 +1,2 @@ | |||
| export var x = "1"; | ||||
| export * from "./a"; | ||||
|  | @ -0,0 +1,2 @@ | |||
| export * from "./a"; | ||||
| export var x = "1"; | ||||
|  | @ -0,0 +1,2 @@ | |||
| export * from "./a"; | ||||
| export * from "./b"; | ||||
|  | @ -0,0 +1,2 @@ | |||
| export * from "./b"; | ||||
| export * from "./a"; | ||||
|  | @ -0,0 +1,2 @@ | |||
| export * from "./c"; | ||||
| export * from "./d"; | ||||
|  | @ -0,0 +1,4 @@ | |||
| export * from "./a"; | ||||
| export * from "./b"; | ||||
| export * from "./c"; | ||||
| export * from "./d"; | ||||
|  | @ -0,0 +1,4 @@ | |||
| export * from "./d"; | ||||
| export * from "./b"; | ||||
| export * from "./c"; | ||||
| export * from "./a"; | ||||
|  | @ -0,0 +1 @@ | |||
| export var x = "a"; | ||||
|  | @ -0,0 +1 @@ | |||
| export var x = "b"; | ||||
|  | @ -0,0 +1 @@ | |||
| exports.x = "c"; | ||||
|  | @ -0,0 +1 @@ | |||
| exports.x = "d"; | ||||
|  | @ -0,0 +1,35 @@ | |||
| import { x as x1 } from "./1?a"; | ||||
| import { x as x2 } from "./2?a"; | ||||
| import { x as x3 } from "./3?a"; | ||||
| import { x as x4 } from "./4?a"; | ||||
| import { x as x5 } from "./5?a"; | ||||
| import { x as x6 } from "./6?a"; | ||||
| import { x as x7 } from "./7?a"; | ||||
| 
 | ||||
| var y1 = require("./1?b").x; | ||||
| var y2 = require("./2?b").x; | ||||
| var y3 = require("./3?b").x; | ||||
| var y4 = require("./4?b").x; | ||||
| var y5 = require("./5?b").x; | ||||
| var y6 = require("./6?b").x; | ||||
| var y7 = require("./7?b").x; | ||||
| 
 | ||||
| it("should not overwrite when using star export (known exports)", function() { | ||||
| 	x1.should.be.eql("1"); | ||||
| 	x2.should.be.eql("1"); | ||||
| 	x3.should.be.eql("a"); | ||||
| 	x4.should.be.eql("b"); | ||||
| 	x5.should.be.eql("c"); | ||||
| 	x6.should.be.eql("a"); | ||||
| 	x7.should.be.eql("d"); | ||||
| }); | ||||
| 
 | ||||
| it("should not overwrite when using star export (unknown exports)", function() { | ||||
| 	y1.should.be.eql("1"); | ||||
| 	y2.should.be.eql("1"); | ||||
| 	y3.should.be.eql("a"); | ||||
| 	y4.should.be.eql("b"); | ||||
| 	y5.should.be.eql("c"); | ||||
| 	y6.should.be.eql("a"); | ||||
| 	y7.should.be.eql("d"); | ||||
| }); | ||||
|  | @ -0,0 +1 @@ | |||
| export * from "./a"; | ||||
|  | @ -1,7 +1,7 @@ | |||
| Hash: 8e46421d7f7a7d266a00 | ||||
| Time: Xms | ||||
|                   Asset       Size  Chunks             Chunk Names | ||||
| 48c8b1dae03a37363ec8.js    4.17 kB       1  [emitted]   | ||||
| 48c8b1dae03a37363ec8.js    4.24 kB       1  [emitted]   | ||||
| 2fa7af5012a3d8b778dd.js    2.22 kB       2  [emitted]   | ||||
| a5b577236621262c2bcf.js    1.93 kB       3  [emitted]   | ||||
| 88d78642a86768757078.js  977 bytes       4  [emitted]   | ||||
|  |  | |||
|  | @ -6,7 +6,7 @@ Time: Xms | |||
| 5ae9e18455b866684bd0.js    1.94 kB       2  [emitted]   | ||||
| e91ec4902ca3057b42bb.js    1.93 kB       3  [emitted]   | ||||
| 0947f0875d56ab0bfe02.js  977 bytes       4  [emitted]   | ||||
| 6335d9dcc7fa048743b7.js    7.13 kB       6  [emitted]  main | ||||
| 6335d9dcc7fa048743b7.js     7.2 kB       6  [emitted]  main | ||||
| cf500be0e585f01d2ccb.js  983 bytes       9  [emitted]   | ||||
| a7bfb642a544b4302cc4.js  975 bytes      11  [emitted]   | ||||
| Entrypoint main = 6335d9dcc7fa048743b7.js | ||||
|  |  | |||
|  | @ -4,7 +4,7 @@ Time: Xms | |||
| 0.bundle.js  227 bytes       0  [emitted]   | ||||
| 1.bundle.js  106 bytes       1  [emitted]   | ||||
| 2.bundle.js  200 bytes       2  [emitted]   | ||||
|   bundle.js    5.77 kB       3  [emitted]  main | ||||
|   bundle.js    5.84 kB       3  [emitted]  main | ||||
| chunk    {0} 0.bundle.js 54 bytes {3} [rendered] | ||||
|     > [5] (webpack)/test/statsCases/chunks/index.js 3:0-16 | ||||
|     [2] (webpack)/test/statsCases/chunks/c.js 54 bytes {0} [built] | ||||
|  |  | |||
|  | @ -1,6 +1,6 @@ | |||
| Hash: 6c781fe6bf412ba6435b | ||||
| Time: Xms | ||||
|   Asset     Size  Chunks             Chunk Names | ||||
| main.js  2.43 kB       0  [emitted]  main | ||||
| main.js  2.51 kB       0  [emitted]  main | ||||
| chunk    {0} main.js (main) 0 bytes [entry] [rendered] | ||||
|     [0] (webpack)/test/statsCases/color-disabled/index.js 0 bytes {0} [built] | ||||
|  | @ -1,6 +1,6 @@ | |||
| Hash: <CLR=BOLD>6c781fe6bf412ba6435b</CLR> | ||||
| Time: <CLR=BOLD>X</CLR>ms | ||||
|   <CLR=BOLD>Asset</CLR>     <CLR=BOLD>Size</CLR>  <CLR=BOLD>Chunks</CLR>  <CLR=39,BOLD><CLR=22>           <CLR=BOLD>Chunk Names</CLR> | ||||
| <CLR=32>main.js</CLR>  2.43 kB       <CLR=BOLD>0</CLR>  <CLR=32>[emitted]</CLR>  main | ||||
| <CLR=32>main.js</CLR>  2.51 kB       <CLR=BOLD>0</CLR>  <CLR=32>[emitted]</CLR>  main | ||||
| chunk    {<CLR=33>0</CLR>} <CLR=32>main.js</CLR> (main) 0 bytes<CLR=33> [entry]</CLR><CLR=32> [rendered]</CLR> | ||||
|     [0] <CLR=BOLD>(webpack)/test/statsCases/color-enabled-custom/index.js</CLR> 0 bytes {<CLR=33>0</CLR>}<CLR=32> [built]</CLR> | ||||
|  | @ -1,6 +1,6 @@ | |||
| Hash: <CLR=BOLD>6c781fe6bf412ba6435b</CLR> | ||||
| Time: <CLR=BOLD>X</CLR>ms | ||||
|   <CLR=BOLD>Asset</CLR>     <CLR=BOLD>Size</CLR>  <CLR=BOLD>Chunks</CLR>  <CLR=39,BOLD><CLR=22>           <CLR=BOLD>Chunk Names</CLR> | ||||
| <CLR=32,BOLD>main.js</CLR>  2.43 kB       <CLR=BOLD>0</CLR>  <CLR=32,BOLD>[emitted]</CLR>  main | ||||
| <CLR=32,BOLD>main.js</CLR>  2.51 kB       <CLR=BOLD>0</CLR>  <CLR=32,BOLD>[emitted]</CLR>  main | ||||
| chunk    {<CLR=33,BOLD>0</CLR>} <CLR=32,BOLD>main.js</CLR> (main) 0 bytes<CLR=33,BOLD> [entry]</CLR><CLR=32,BOLD> [rendered]</CLR> | ||||
|     [0] <CLR=BOLD>(webpack)/test/statsCases/color-enabled/index.js</CLR> 0 bytes {<CLR=33,BOLD>0</CLR>}<CLR=32,BOLD> [built]</CLR> | ||||
|  | @ -3,13 +3,13 @@ Child | |||
|     Hash: 052d0451a89cb963e4d3 | ||||
|     Time: Xms | ||||
|       Asset     Size  Chunks             Chunk Names | ||||
|     main.js  2.48 kB       0  [emitted]  main | ||||
|     main.js  2.55 kB       0  [emitted]  main | ||||
|     chunk    {0} main.js (main) 24 bytes [entry] [rendered] | ||||
|         [0] (webpack)/test/statsCases/define-plugin/index.js 24 bytes {0} [built] | ||||
| Child | ||||
|     Hash: eb3ff8e5a88b9234d04f | ||||
|     Time: Xms | ||||
|       Asset     Size  Chunks             Chunk Names | ||||
|     main.js  2.48 kB       0  [emitted]  main | ||||
|     main.js  2.55 kB       0  [emitted]  main | ||||
|     chunk    {0} main.js (main) 24 bytes [entry] [rendered] | ||||
|         [0] (webpack)/test/statsCases/define-plugin/index.js 24 bytes {0} [built] | ||||
|  | @ -1,7 +1,7 @@ | |||
| Hash: affacd3db222d3fcb700 | ||||
| Time: Xms | ||||
|     Asset     Size  Chunks             Chunk Names | ||||
| bundle.js  2.69 kB       0  [emitted]  main | ||||
| bundle.js  2.77 kB       0  [emitted]  main | ||||
| chunk    {0} bundle.js (main) 132 bytes [entry] [rendered] | ||||
|     [0] (webpack)/test/statsCases/exclude-with-loader/a.txt 43 bytes {0} [built] | ||||
|     [2] (webpack)/test/statsCases/exclude-with-loader/index.js 46 bytes {0} [built] | ||||
|  |  | |||
|  | @ -1,7 +1,7 @@ | |||
| Hash: 5957a4911072fb217ca1 | ||||
| Time: Xms | ||||
|   Asset     Size  Chunks             Chunk Names | ||||
| main.js  2.57 kB       0  [emitted]  main | ||||
| main.js  2.64 kB       0  [emitted]  main | ||||
| chunk    {0} main.js (main) 59 bytes [entry] [rendered] | ||||
|     [0] external "test" 42 bytes {0} [not cacheable] | ||||
|     [1] (webpack)/test/statsCases/external/index.js 17 bytes {0} [built] | ||||
|  | @ -8,7 +8,7 @@ Time: Xms | |||
|    4.js  136 bytes    4, 6  [emitted]  chunk | ||||
|    5.js  293 bytes    5, 3  [emitted]  cir2 from cir1 | ||||
|    6.js   78 bytes       6  [emitted]  ac in ab | ||||
| main.js    6.37 kB       7  [emitted]  main | ||||
| main.js    6.45 kB       7  [emitted]  main | ||||
| chunk    {0} 0.js (cir1) 81 bytes {7} {5} {3} [rendered] | ||||
|     > duplicate cir1 from cir2 [3] (webpack)/test/statsCases/optimize-chunks/circular2.js 1:0-79 | ||||
|     > duplicate cir1 [8] (webpack)/test/statsCases/optimize-chunks/index.js 13:0-54 | ||||
|  |  | |||
|  | @ -4,7 +4,7 @@ Time: Xms | |||
|    0.js  227 bytes       0  [emitted]   | ||||
|    1.js  106 bytes       1  [emitted]   | ||||
|    2.js  200 bytes       2  [emitted]   | ||||
| main.js    5.76 kB       3  [emitted]  main | ||||
| main.js    5.83 kB       3  [emitted]  main | ||||
| Entrypoint main = main.js | ||||
| chunk    {0} 0.js 54 bytes {3} [rendered] | ||||
|     [2] (webpack)/test/statsCases/preset-verbose/c.js 54 bytes {0} [built] | ||||
|  |  | |||
|  | @ -3,7 +3,7 @@ Child | |||
|     Hash: 9ff2cfa8882f273c8c6d | ||||
|     Time: Xms | ||||
|                                    Asset      Size  Chunks             Chunk Names | ||||
|                  f49aa1e6c5ada5da859b.js   2.57 kB       0  [emitted]  main | ||||
|                  f49aa1e6c5ada5da859b.js   2.65 kB       0  [emitted]  main | ||||
|     c815cf440254d4f3bba4e7041db00a28.css  26 bytes       0  [emitted]  main | ||||
|     chunk    {0} f49aa1e6c5ada5da859b.js, c815cf440254d4f3bba4e7041db00a28.css (main) 64 bytes [entry] [rendered] | ||||
|         [0] (webpack)/test/statsCases/separate-css-bundle/a/file.css 41 bytes {0} [built] | ||||
|  | @ -16,7 +16,7 @@ Child | |||
|     Hash: 9ff2cfa8882f273c8c6d | ||||
|     Time: Xms | ||||
|                                    Asset      Size  Chunks             Chunk Names | ||||
|                  f49aa1e6c5ada5da859b.js   2.57 kB       0  [emitted]  main | ||||
|                  f49aa1e6c5ada5da859b.js   2.65 kB       0  [emitted]  main | ||||
|     a3f385680aef7a9bb2a517699532cc34.css  28 bytes       0  [emitted]  main | ||||
|     chunk    {0} f49aa1e6c5ada5da859b.js, a3f385680aef7a9bb2a517699532cc34.css (main) 64 bytes [entry] [rendered] | ||||
|         [0] (webpack)/test/statsCases/separate-css-bundle/b/file.css 41 bytes {0} [built] | ||||
|  |  | |||
|  | @ -1,7 +1,7 @@ | |||
| Hash: 0bd4f09244f0e8c60354 | ||||
| Time: Xms | ||||
|     Asset     Size  Chunks             Chunk Names | ||||
| bundle.js  2.43 kB       0  [emitted]  main | ||||
| bundle.js  2.51 kB       0  [emitted]  main | ||||
| chunk    {0} bundle.js (main) 0 bytes [entry] [rendered] | ||||
|     > main [0] (webpack)/test/statsCases/simple-more-info/index.js  | ||||
|     [0] (webpack)/test/statsCases/simple-more-info/index.js 0 bytes {0} [built] | ||||
|  |  | |||
|  | @ -1,6 +1,6 @@ | |||
| Hash: 0bd4f09244f0e8c60354 | ||||
| Time: Xms | ||||
|     Asset     Size  Chunks             Chunk Names | ||||
| bundle.js  2.43 kB       0  [emitted]  main | ||||
| bundle.js  2.51 kB       0  [emitted]  main | ||||
| chunk    {0} bundle.js (main) 0 bytes [entry] [rendered] | ||||
|     [0] (webpack)/test/statsCases/simple/index.js 0 bytes {0} [built] | ||||
|  | @ -1,7 +1,7 @@ | |||
| Hash: 8bac53cc0c37d71baf6b | ||||
| Hash: 9e57dbeb6deda98eb9bf | ||||
| Time: Xms | ||||
|     Asset     Size  Chunks             Chunk Names | ||||
| bundle.js  7.22 kB       0  [emitted]  main | ||||
| bundle.js  7.08 kB       0  [emitted]  main | ||||
| chunk    {0} bundle.js (main) 588 bytes [entry] [rendered] | ||||
|    [0] (webpack)/test/statsCases/tree-shaking/a.js 13 bytes {0} [built] | ||||
|        [exports: a] | ||||
|  | @ -10,7 +10,7 @@ chunk    {0} bundle.js (main) 588 bytes [entry] [rendered] | |||
|        [exports: b] | ||||
|        [only some exports used: ] | ||||
|    [2] (webpack)/test/statsCases/tree-shaking/unknown.js 0 bytes {0} [built] | ||||
|        [only some exports used: a, c] | ||||
|        [only some exports used: c] | ||||
|    [3] (webpack)/test/statsCases/tree-shaking/edge.js 45 bytes {0} [built] | ||||
|        [only some exports used: y] | ||||
|    [4] (webpack)/test/statsCases/tree-shaking/reexport-known.js 49 bytes {0} [built] | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue