mirror of https://github.com/webpack/webpack.git
added named chunks
This commit is contained in:
parent
f2d412cac0
commit
e48e2a2c12
|
@ -33,7 +33,7 @@ module.exports = function buildDeps(context, mainModule, options, callback) {
|
||||||
modulesById: {},
|
modulesById: {},
|
||||||
chunks: {},
|
chunks: {},
|
||||||
nextModuleId: 0,
|
nextModuleId: 0,
|
||||||
nextChunkId: 0,
|
nextChunkId: 1,
|
||||||
chunkModules: {} // used by checkObsolete
|
chunkModules: {} // used by checkObsolete
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -58,6 +58,7 @@ module.exports = function buildDeps(context, mainModule, options, callback) {
|
||||||
options.events.emit("task-end", "build modules");
|
options.events.emit("task-end", "build modules");
|
||||||
|
|
||||||
// split the modules into chunks
|
// split the modules into chunks
|
||||||
|
depTree.modulesById[mainModuleId].name = "main";
|
||||||
addChunk(depTree, depTree.modulesById[mainModuleId], options);
|
addChunk(depTree, depTree.modulesById[mainModuleId], options);
|
||||||
|
|
||||||
// rename the module ids after a defined sheme
|
// rename the module ids after a defined sheme
|
||||||
|
@ -424,13 +425,23 @@ function createRealIds(depTree, options) {
|
||||||
|
|
||||||
// add a chunk
|
// add a chunk
|
||||||
function addChunk(depTree, chunkStartpoint, options) {
|
function addChunk(depTree, chunkStartpoint, options) {
|
||||||
var chunk = {
|
var chunk;
|
||||||
id: depTree.nextChunkId++,
|
if(chunkStartpoint && chunkStartpoint.name) {
|
||||||
modules: {},
|
chunk = depTree.chunks[chunkStartpoint.name];
|
||||||
context: chunkStartpoint,
|
if(chunk) {
|
||||||
usages: 1
|
chunk.usages++;
|
||||||
};
|
chunk.contexts.push(chunkStartpoint);
|
||||||
depTree.chunks[chunk.id] = chunk;
|
}
|
||||||
|
}
|
||||||
|
if(!chunk) {
|
||||||
|
chunk = {
|
||||||
|
id: (chunkStartpoint && chunkStartpoint.name) || depTree.nextChunkId++,
|
||||||
|
modules: {},
|
||||||
|
contexts: chunkStartpoint ? [chunkStartpoint] : [],
|
||||||
|
usages: 1
|
||||||
|
};
|
||||||
|
depTree.chunks[chunk.id] = chunk;
|
||||||
|
}
|
||||||
if(chunkStartpoint) {
|
if(chunkStartpoint) {
|
||||||
chunkStartpoint.chunkId = chunk.id;
|
chunkStartpoint.chunkId = chunk.id;
|
||||||
addModuleToChunk(depTree, chunkStartpoint, chunk.id, options);
|
addModuleToChunk(depTree, chunkStartpoint, chunk.id, options);
|
||||||
|
@ -498,7 +509,7 @@ function removeChunkIfEmpty(depTree, chunk) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(!hasModules) {
|
if(!hasModules) {
|
||||||
chunk.context.chunkId = null;
|
chunk.contexts.forEach(function(c) { c.chunkId = null; });
|
||||||
chunk.empty = true;
|
chunk.empty = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -515,8 +526,9 @@ function checkObsolete(depTree, chunk) {
|
||||||
var moduleString = modules.join(" ");
|
var moduleString = modules.join(" ");
|
||||||
if(depTree.chunkModules[moduleString]) {
|
if(depTree.chunkModules[moduleString]) {
|
||||||
chunk.equals = depTree.chunkModules[moduleString];
|
chunk.equals = depTree.chunkModules[moduleString];
|
||||||
if(chunk.context)
|
chunk.contexts.forEach(function(c) {
|
||||||
chunk.context.chunkId = chunk.equals;
|
c.chunkId = chunk.equals;
|
||||||
|
});
|
||||||
} else
|
} else
|
||||||
depTree.chunkModules[moduleString] = chunk.id;
|
depTree.chunkModules[moduleString] = chunk.id;
|
||||||
}
|
}
|
||||||
|
@ -525,13 +537,13 @@ function checkObsolete(depTree, chunk) {
|
||||||
function createRealChunkIds(depTree, options) {
|
function createRealChunkIds(depTree, options) {
|
||||||
var sortedChunks = [];
|
var sortedChunks = [];
|
||||||
for(var id in depTree.chunks) {
|
for(var id in depTree.chunks) {
|
||||||
if(""+id === "0") continue;
|
if(id === "main") continue;
|
||||||
var chunk = depTree.chunks[id];
|
var chunk = depTree.chunks[id];
|
||||||
if(chunk.empty) continue;
|
if(chunk.empty) continue;
|
||||||
if(chunk.equals !== undefined) continue;
|
if(chunk.equals !== undefined) continue;
|
||||||
sortedChunks.push(chunk);
|
sortedChunks.push(chunk);
|
||||||
}
|
}
|
||||||
depTree.chunks["0"].realId = 0;
|
depTree.chunks["main"].realId = 0;
|
||||||
sortedChunks.sort(function(a, b) {
|
sortedChunks.sort(function(a, b) {
|
||||||
if(a.usages < b.usages)
|
if(a.usages < b.usages)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
|
@ -274,6 +274,10 @@ function walkExpression(context, expression) {
|
||||||
expression.arguments[1].body.range[0]+1,
|
expression.arguments[1].body.range[0]+1,
|
||||||
expression.arguments[1].body.range[1]-1
|
expression.arguments[1].body.range[1]-1
|
||||||
];
|
];
|
||||||
|
if(expression.arguments[2]) {
|
||||||
|
newContext.name = parseString(expression.arguments[2]);
|
||||||
|
newContext.nameRange = expression.arguments[2].range;
|
||||||
|
}
|
||||||
context.asyncs = context.asyncs || [];
|
context.asyncs = context.asyncs || [];
|
||||||
context.asyncs.push(newContext);
|
context.asyncs.push(newContext);
|
||||||
context = newContext;
|
context = newContext;
|
||||||
|
|
|
@ -214,7 +214,7 @@ function webpack(context, moduleName, options, callback) {
|
||||||
// all ids of the chunks, in desc order
|
// all ids of the chunks, in desc order
|
||||||
var chunkIds = Object.keys(depTree.chunks);
|
var chunkIds = Object.keys(depTree.chunks);
|
||||||
chunkIds.sort(function(a,b) {
|
chunkIds.sort(function(a,b) {
|
||||||
return parseInt(depTree.chunks[b].realId, 10) - parseInt(depTree.chunks[a].realId, 10);
|
return depTree.chunks[b].realId - depTree.chunks[a].realId;
|
||||||
});
|
});
|
||||||
|
|
||||||
// the template used
|
// the template used
|
||||||
|
@ -398,8 +398,8 @@ function webpack(context, moduleName, options, callback) {
|
||||||
buffer.modulesIncludingDuplicates = sum;
|
buffer.modulesIncludingDuplicates = sum;
|
||||||
buffer.modulesPerChunk = Math.round(sum / chunksCount*10)/10; // DEPRECATED: useless info
|
buffer.modulesPerChunk = Math.round(sum / chunksCount*10)/10; // DEPRECATED: useless info
|
||||||
sum = 0;
|
sum = 0;
|
||||||
for(var moduleId in depTree.chunks[0].modules) {
|
for(var moduleId in depTree.chunks.main.modules) {
|
||||||
if(depTree.chunks[0].modules[moduleId] === "include")
|
if(depTree.chunks.main.modules[moduleId] === "include")
|
||||||
sum++;
|
sum++;
|
||||||
}
|
}
|
||||||
buffer.modulesFirstChunk = sum;
|
buffer.modulesFirstChunk = sum;
|
||||||
|
|
|
@ -108,6 +108,13 @@ module.exports = function(module, options, toRealId, toRealChuckId) {
|
||||||
value: ((asyncItem.chunkId && toRealChuckId(asyncItem.chunkId) || "0") + "")
|
value: ((asyncItem.chunkId && toRealChuckId(asyncItem.chunkId) || "0") + "")
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
if(asyncItem.nameRange) {
|
||||||
|
replaces.push({
|
||||||
|
from: asyncItem.nameRange[0],
|
||||||
|
to: asyncItem.nameRange[1],
|
||||||
|
value: "/* "+ asyncItem.name.replace(/\/\*/, "* nice try /") + " */0"
|
||||||
|
});
|
||||||
|
}
|
||||||
if(asyncItem.blockRange) {
|
if(asyncItem.blockRange) {
|
||||||
genReplacesFreeVars(asyncItem.blockRange, freeVars);
|
genReplacesFreeVars(asyncItem.blockRange, freeVars);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "webpack",
|
"name": "webpack",
|
||||||
"version": "0.4.1",
|
"version": "0.4.2",
|
||||||
"author": "Tobias Koppers @sokra",
|
"author": "Tobias Koppers @sokra",
|
||||||
"description": "Packs CommonJs Modules for the browser. Allows to split your codebase into multiple bundles, which can be loaded on demand. Support loading of js, json, jade, coffee, css, ... out of the box and more with custom loaders.",
|
"description": "Packs CommonJs Modules for the browser. Allows to split your codebase into multiple bundles, which can be loaded on demand. Support loading of js, json, jade, coffee, css, ... out of the box and more with custom loaders.",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|
|
@ -21,9 +21,9 @@ vows.describe("buildDeps").addBatch({
|
||||||
},
|
},
|
||||||
|
|
||||||
"one chunk": function(depTree) {
|
"one chunk": function(depTree) {
|
||||||
assert.deepEqual(Object.keys(depTree.chunks), ["0"]);
|
assert.deepEqual(Object.keys(depTree.chunks), ["main"]);
|
||||||
for(var i in depTree.modulesById) {
|
for(var i in depTree.modulesById) {
|
||||||
assert.deepEqual(depTree.modulesById[i].chunks, [0]);
|
assert.deepEqual(depTree.modulesById[i].chunks, ["main"]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -42,12 +42,12 @@ vows.describe("buildDeps").addBatch({
|
||||||
},
|
},
|
||||||
|
|
||||||
"two chunks": function(depTree) {
|
"two chunks": function(depTree) {
|
||||||
assert.deepEqual(Object.keys(depTree.chunks), ["0", "1"]);
|
assert.deepEqual(Object.keys(depTree.chunks), ["1", "main"]);
|
||||||
assert.deepEqual(depTree.modulesByFile[path.join(__dirname, "fixtures", "main2.js")].chunks, [0]);
|
assert.deepEqual(depTree.modulesByFile[path.join(__dirname, "fixtures", "main2.js")].chunks, ["main"]);
|
||||||
assert.deepEqual(depTree.modulesByFile[path.join(__dirname, "fixtures", "a.js")].chunks, [0]);
|
assert.deepEqual(depTree.modulesByFile[path.join(__dirname, "fixtures", "a.js")].chunks, ["main"]);
|
||||||
assert.deepEqual(depTree.modulesByFile[path.join(__dirname, "fixtures", "b.js")].chunks, [0]);
|
assert.deepEqual(depTree.modulesByFile[path.join(__dirname, "fixtures", "b.js")].chunks, ["main"]);
|
||||||
assert.deepEqual(depTree.modulesByFile[path.join(__dirname, "fixtures", "node_modules", "m1", "a.js")].chunks, [1]);
|
assert.deepEqual(depTree.modulesByFile[path.join(__dirname, "fixtures", "node_modules", "m1", "a.js")].chunks, ["1"]);
|
||||||
assert.deepEqual(depTree.modulesByFile[path.join(__dirname, "fixtures", "node_modules", "m1", "b.js")].chunks, [1]);
|
assert.deepEqual(depTree.modulesByFile[path.join(__dirname, "fixtures", "node_modules", "m1", "b.js")].chunks, ["1"]);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -63,19 +63,19 @@ vows.describe("buildDeps").addBatch({
|
||||||
},
|
},
|
||||||
|
|
||||||
"two chunks": function(depTree) {
|
"two chunks": function(depTree) {
|
||||||
assert.deepEqual(Object.keys(depTree.chunks), ["0", "1"]);
|
assert.deepEqual(Object.keys(depTree.chunks), ["1", "main"]);
|
||||||
assert.deepEqual(depTree.modulesByFile[path.join(__dirname, "fixtures", "main3.js")].chunks, [0]);
|
assert.deepEqual(depTree.modulesByFile[path.join(__dirname, "fixtures", "main3.js")].chunks, ["main"]);
|
||||||
assert.deepEqual(depTree.modulesByFile[path.join(__dirname, "fixtures", "a.js")].chunks, [0, 1]);
|
assert.deepEqual(depTree.modulesByFile[path.join(__dirname, "fixtures", "a.js")].chunks, ["main", "1"]);
|
||||||
assert.deepEqual(depTree.modulesByFile[path.join(__dirname, "fixtures", "c.js")].chunks, [1]);
|
assert.deepEqual(depTree.modulesByFile[path.join(__dirname, "fixtures", "c.js")].chunks, ["1"]);
|
||||||
var main3id = ""+depTree.modulesByFile[path.join(__dirname, "fixtures", "main3.js")].id;
|
var main3id = ""+depTree.modulesByFile[path.join(__dirname, "fixtures", "main3.js")].id;
|
||||||
var aid = ""+depTree.modulesByFile[path.join(__dirname, "fixtures", "a.js")].id;
|
var aid = ""+depTree.modulesByFile[path.join(__dirname, "fixtures", "a.js")].id;
|
||||||
var cid = ""+depTree.modulesByFile[path.join(__dirname, "fixtures", "c.js")].id;
|
var cid = ""+depTree.modulesByFile[path.join(__dirname, "fixtures", "c.js")].id;
|
||||||
assert.deepEqual(Object.keys(depTree.chunks[0].modules), [main3id, aid]);
|
assert.deepEqual(Object.keys(depTree.chunks.main.modules), [main3id, aid]);
|
||||||
assert.deepEqual(Object.keys(depTree.chunks[1].modules), [cid, aid]);
|
assert.deepEqual(Object.keys(depTree.chunks["1"].modules), [cid, aid]);
|
||||||
assert.deepEqual(depTree.chunks[0].modules[main3id], "include");
|
assert.deepEqual(depTree.chunks.main.modules[main3id], "include");
|
||||||
assert.deepEqual(depTree.chunks[0].modules[aid], "include");
|
assert.deepEqual(depTree.chunks.main.modules[aid], "include");
|
||||||
assert.deepEqual(depTree.chunks[1].modules[aid], "in-parent");
|
assert.deepEqual(depTree.chunks["1"].modules[aid], "in-parent");
|
||||||
assert.deepEqual(depTree.chunks[1].modules[cid], "include");
|
assert.deepEqual(depTree.chunks["1"].modules[cid], "include");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue