mirror of https://github.com/webpack/webpack.git
More refactoring Compilation.js and RemoveParentModulesPlugin.js
This commit is contained in:
parent
588976d5e9
commit
74efa93d5f
|
|
@ -88,13 +88,13 @@ class Compilation extends Tapable {
|
|||
}
|
||||
|
||||
addModule(module, cacheGroup) {
|
||||
cacheGroup = cacheGroup || "m";
|
||||
const identifier = module.identifier();
|
||||
if(this._modules[identifier]) {
|
||||
return false;
|
||||
}
|
||||
if(this.cache && this.cache[cacheGroup + identifier]) {
|
||||
const cacheModule = this.cache[cacheGroup + identifier];
|
||||
const cacheName = (cacheGroup || "m") + identifier;
|
||||
if(this.cache && this.cache[cacheName]) {
|
||||
const cacheModule = this.cache[cacheName];
|
||||
|
||||
let rebuild = true;
|
||||
if(!cacheModule.error && cacheModule.cacheable && this.fileTimestamps && this.contextTimestamps) {
|
||||
|
|
@ -115,7 +115,7 @@ class Compilation extends Tapable {
|
|||
module.unbuild();
|
||||
this._modules[identifier] = module;
|
||||
if(this.cache) {
|
||||
this.cache[cacheGroup + identifier] = module;
|
||||
this.cache[cacheName] = module;
|
||||
}
|
||||
this.modules.push(module);
|
||||
return true;
|
||||
|
|
@ -752,7 +752,7 @@ class Compilation extends Tapable {
|
|||
iterationOfArrayCallback(block.dependencies, iteratorDependency);
|
||||
}
|
||||
if(block.blocks) {
|
||||
var blocks = block.blocks.slice();
|
||||
var blocks = block.blocks;
|
||||
var indexBlock = blocks.length;
|
||||
while(indexBlock--) {
|
||||
iteratorBlock(blocks[indexBlock]);
|
||||
|
|
@ -900,37 +900,50 @@ class Compilation extends Tapable {
|
|||
}
|
||||
|
||||
applyModuleIds() {
|
||||
const unusedIds = [];
|
||||
let nextFreeModuleId = 0;
|
||||
const usedIds = [];
|
||||
const usedIdMap = {};
|
||||
var unusedIds = [];
|
||||
var nextFreeModuleId = 0;
|
||||
var usedIds = [];
|
||||
// TODO
|
||||
var usedIdMap = Object.create(null);
|
||||
if(this.usedModuleIds) {
|
||||
Object.keys(this.usedModuleIds).forEach(key => {
|
||||
const id = this.usedModuleIds[key];
|
||||
if(typeof usedIdMap[id] === "undefined") {
|
||||
if(!usedIdMap[id]) {
|
||||
usedIds.push(id);
|
||||
usedIdMap[id] = id;
|
||||
usedIdMap[id] = true;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// TODO
|
||||
var modules1 = this.modules;
|
||||
for(var indexModule1 = 0; indexModule1 < modules1.length; indexModule1++) {
|
||||
var module1 = modules1[indexModule1];
|
||||
if(module1.id !== null && typeof usedIdMap[module1.id] === "undefined") {
|
||||
if(module1.id && !usedIdMap[module1.id]) {
|
||||
usedIds.push(module1.id);
|
||||
usedIdMap[module1.id] = module1.id;
|
||||
usedIdMap[module1.id] = true;
|
||||
}
|
||||
}
|
||||
|
||||
if(usedIds.length > 0) {
|
||||
const usedNumberIds = usedIds.filter(id => typeof id === "number");
|
||||
nextFreeModuleId = usedNumberIds.reduce((a, b) => Math.max(a, b), -1) + 1;
|
||||
for(let i = 0; i < nextFreeModuleId; i++) {
|
||||
if(usedIdMap[i] !== i)
|
||||
unusedIds.push(i);
|
||||
var usedIdMax = -1;
|
||||
for(var index = 0; index < usedIds.length; index++) {
|
||||
var usedIdKey = usedIds[index];
|
||||
|
||||
if(typeof usedIdKey !== "number") {
|
||||
continue;
|
||||
}
|
||||
|
||||
usedIdMax = Math.max(usedIdMax, usedIdKey);
|
||||
}
|
||||
|
||||
var lengthFreeModules = nextFreeModuleId = usedIdMax + 1;
|
||||
|
||||
while(lengthFreeModules--) {
|
||||
if(!usedIdMap[lengthFreeModules]) {
|
||||
unusedIds.push(lengthFreeModules);
|
||||
}
|
||||
}
|
||||
unusedIds.reverse();
|
||||
}
|
||||
|
||||
var modules2 = this.modules;
|
||||
|
|
@ -969,11 +982,12 @@ class Compilation extends Tapable {
|
|||
|
||||
if(this.usedChunkIds) {
|
||||
nextFreeChunkId = getNextFreeChunkId(this.usedChunkIds) + 1;
|
||||
for(let i = 0; i < nextFreeChunkId; i++) {
|
||||
if(this.usedChunkIds[i] !== i)
|
||||
unusedIds.push(i);
|
||||
var index = nextFreeChunkId;
|
||||
while(index--) {
|
||||
if(this.usedChunkIds[index] !== index) {
|
||||
unusedIds.push(index);
|
||||
}
|
||||
}
|
||||
unusedIds.reverse();
|
||||
}
|
||||
|
||||
var chunks = this.chunks;
|
||||
|
|
@ -1165,8 +1179,9 @@ class Compilation extends Tapable {
|
|||
try {
|
||||
const useChunkHash = !chunk.hasRuntime() || (this.mainTemplate.useChunkHash && this.mainTemplate.useChunkHash(chunk));
|
||||
const usedHash = useChunkHash ? chunkHash : this.fullHash;
|
||||
if(this.cache && this.cache[`c${chunk.id}`] && this.cache[`c${chunk.id}`].hash === usedHash) {
|
||||
source = this.cache[`c${chunk.id}`].source;
|
||||
const cacheName = "c" + chunk.id;
|
||||
if(this.cache && this.cache[cacheName] && this.cache[cacheName].hash === usedHash) {
|
||||
source = this.cache[cacheName].source;
|
||||
} else {
|
||||
if(chunk.hasRuntime()) {
|
||||
source = this.mainTemplate.render(this.hash, chunk, this.moduleTemplate, this.dependencyTemplates);
|
||||
|
|
@ -1174,7 +1189,7 @@ class Compilation extends Tapable {
|
|||
source = this.chunkTemplate.render(chunk, this.moduleTemplate, this.dependencyTemplates);
|
||||
}
|
||||
if(this.cache) {
|
||||
this.cache[`c${chunk.id}`] = {
|
||||
this.cache[cacheName] = {
|
||||
hash: usedHash,
|
||||
source: source = (source instanceof CachedSource ? source : new CachedSource(source))
|
||||
};
|
||||
|
|
|
|||
|
|
@ -24,35 +24,35 @@ function hasModule(chunk, module, checkedChunks) {
|
|||
|
||||
function allHaveModule(someChunks, module, checkedChunks) {
|
||||
if(!checkedChunks) checkedChunks = [];
|
||||
let chunks = [];
|
||||
var chunks = [];
|
||||
for(var i = 0; i < someChunks.length; i++) {
|
||||
checkedChunks.push(someChunks[i]);
|
||||
const subChunks = hasModule(someChunks[i], module, checkedChunks);
|
||||
var subChunks = hasModule(someChunks[i], module, checkedChunks);
|
||||
if(!subChunks) return false;
|
||||
addToSet(chunks, subChunks);
|
||||
|
||||
for(var index = 0; index < subChunks.length; index++) {
|
||||
var item = subChunks[index];
|
||||
|
||||
if(!chunks.length || chunks.indexOf(item) < 0) {
|
||||
chunks.push(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
return chunks;
|
||||
}
|
||||
|
||||
function addToSet(set, items) {
|
||||
for(var index = 0; index < items.length; index++) {
|
||||
var item = items[index];
|
||||
|
||||
if(set.indexOf(item) < 0) {
|
||||
set.push(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function debugIds(chunks) {
|
||||
const list = chunks.map((chunk) => {
|
||||
return chunk.debugId;
|
||||
});
|
||||
const debugIdMissing = list.some((dId) => {
|
||||
return typeof dId !== "number";
|
||||
});
|
||||
if(debugIdMissing)
|
||||
return "no";
|
||||
var list = [];
|
||||
for(var i = 0; i < chunks.length; i++) {
|
||||
var debugId = chunks[i].debugId;
|
||||
|
||||
if(typeof debugId !== "number") {
|
||||
return "no";
|
||||
}
|
||||
|
||||
list.push(debugId);
|
||||
}
|
||||
|
||||
list.sort();
|
||||
return list.join(",");
|
||||
}
|
||||
|
|
@ -70,9 +70,9 @@ class RemoveParentModulesPlugin {
|
|||
var module = modules[i];
|
||||
|
||||
if(chunk.parents.length === 0) continue;
|
||||
var dId = "$" + debugIds(module.chunks);
|
||||
var dId = debugIds(module.chunks);
|
||||
var parentChunksWithModule;
|
||||
if((dId in cache) && dId !== "$no") {
|
||||
if((dId in cache) && dId !== "no") {
|
||||
parentChunksWithModule = cache[dId];
|
||||
} else {
|
||||
parentChunksWithModule = cache[dId] = allHaveModule(chunk.parents, module);
|
||||
|
|
|
|||
Loading…
Reference in New Issue