Skip to content

Commit 4b9472b

Browse files
committed
save bytes webpack#135
1 parent 2a58d23 commit 4b9472b

6 files changed

+66
-31
lines changed

lib/APIPlugin.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ function APIPlugin() {
1010
module.exports = APIPlugin;
1111

1212
var REPLACEMENTS = {
13-
__webpack_public_path__: "require.modules.c",
13+
__webpack_public_path__: "require.p",
1414
__webpack_require__: "require",
1515
__webpack_modules__: "require.modules",
1616
__webpack_chunk_load__: "require.e",

lib/ChunkTemplate.js

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,26 +15,21 @@ ChunkTemplate.prototype = Object.create(Template.prototype);
1515
ChunkTemplate.prototype.render = function(chunk, moduleTemplate, dependencyTemplates) {
1616
var source = new ConcatSource();
1717
source.add(this.asString(this.renderHeader(chunk)));
18-
chunk.modules.forEach(function(module, idx) {
19-
if(idx != 0) source.add(",\n");
20-
source.add("\n/***/ " + module.id + ":\n");
21-
source.add(moduleTemplate.render(module, dependencyTemplates, chunk));
22-
});
23-
source.add("\n\n");
18+
source.add(this.renderChunkModules(chunk, moduleTemplate, dependencyTemplates));
2419
source.add(this.asString(this.renderFooter(chunk)));
2520
chunk.rendered = true;
2621
return source;
2722
};
2823

2924
ChunkTemplate.prototype.renderHeader = function(chunk) {
30-
return ["{\n"];
25+
return [];
3126
};
3227

3328
ChunkTemplate.prototype.renderFooter = function(chunk) {
34-
return ["}"];
29+
return [];
3530
};
3631

3732
ChunkTemplate.prototype.updateHash = function(hash) {
3833
hash.update("ChunkTemplate");
39-
hash.update("1");
34+
hash.update("2");
4035
};

lib/HotModuleReplacementPlugin.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -322,7 +322,7 @@ var hotInitCode = function() {
322322

323323
try {
324324
var request = new XMLHttpRequest();
325-
request.open("GET", modules.c + $hotMainFilename$, true);
325+
request.open("GET", $require$.p + $hotMainFilename$, true);
326326
request.send(null);
327327
} catch(err) {
328328
return callback(err);
@@ -370,7 +370,7 @@ var hotInitCode = function() {
370370
var script = document.createElement('script');
371371
script.type = 'text/javascript';
372372
script.charset = 'utf-8';
373-
script.src = modules.c + $hotChunkFilename$;
373+
script.src = $require$.p + $hotChunkFilename$;
374374
head.appendChild(script);
375375
}
376376
hotWaitingFilesMap[chunkId] = true;

lib/JsonpMainTemplate.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ JsonpMainTemplate.prototype.renderRequireEnsure = function(hash, chunk) {
5959
"var script = document.createElement('script');",
6060
"script.type = 'text/javascript';",
6161
"script.charset = 'utf-8';",
62-
"script.src = modules.c + " +
62+
"script.src = " + this.requireFn + ".p + " +
6363
JSON.stringify(chunkFilename
6464
.replace(Template.REGEXP_NAME, ""))
6565
.replace(Template.REGEXP_HASH, "\" + " + this.renderCurrentHashCode(hash) + " + \"")

lib/MainTemplate.js

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ MainTemplate.prototype = Object.create(Template.prototype);
1616
MainTemplate.prototype.requireFn = "require";
1717
MainTemplate.prototype.render = function(hash, chunk, moduleTemplate, dependencyTemplates) {
1818
var buf = [];
19+
buf.push(this.asString(this.renderAdditions(hash, chunk, moduleTemplate, dependencyTemplates)));
1920
buf.push(this.asString(this.renderLocalVars(hash, chunk)));
2021
buf.push("");
2122
buf.push("// The require function");
@@ -43,17 +44,7 @@ MainTemplate.prototype.render = function(hash, chunk, moduleTemplate, dependency
4344
};
4445

4546
MainTemplate.prototype.renderModules = function renderModules(hash, chunk, moduleTemplate, dependencyTemplates) {
46-
var source = new ConcatSource();
47-
source.add("{\n");
48-
source.add(this.asString(this.renderInitModules(hash, chunk, moduleTemplate, dependencyTemplates)));
49-
source.add("\n");
50-
chunk.modules.forEach(function(module, idx) {
51-
if(idx != 0) source.add(",\n");
52-
source.add("\n/***/ " + module.id + ":\n");
53-
source.add(moduleTemplate.render(module, dependencyTemplates, chunk));
54-
});
55-
source.add("\n/******/ }");
56-
return source;
47+
return this.renderChunkModules(chunk, moduleTemplate, dependencyTemplates, "/******/ ");
5748
};
5849

5950
MainTemplate.prototype.indent = function indent(str) {
@@ -138,22 +129,25 @@ MainTemplate.prototype.renderRequireExtensions = function(hash, chunk) {
138129
buf.push("");
139130
buf.push("// expose the modules object (__webpack_modules__)");
140131
buf.push(this.requireFn + ".modules = modules;");
132+
141133
buf.push("");
142134
buf.push("// expose the module cache");
143135
buf.push(this.requireFn + ".cache = installedModules;");
136+
137+
var publicPath = this.outputOptions.publicPath || "";
138+
publicPath = publicPath.replace(Template.REGEXP_HASH, hash);
139+
buf.push("");
140+
buf.push("// __webpack_public_path__");
141+
buf.push(this.requireFn + ".p = " + JSON.stringify(publicPath) + ";");
144142
return buf;
145143
};
146144

147145
MainTemplate.prototype.renderInit = function(hash, chunk) {
148146
return [];
149147
};
150148

151-
MainTemplate.prototype.renderInitModules = function(hash, chunk, moduleTemplate, dependencyTemplates) {
152-
var publicPath = this.outputOptions.publicPath || "";
153-
return [
154-
"/******/ // __webpack_public_path__",
155-
"/******/ c: " + JSON.stringify(publicPath.replace(Template.REGEXP_HASH, hash)) + ","
156-
];
149+
MainTemplate.prototype.renderAdditions = function(hash, chunk, moduleTemplate, dependencyTemplates) {
150+
return [];
157151
};
158152

159153
MainTemplate.prototype.renderAddModule = function(hash, chunk, varModuleId, varModule) {
@@ -162,6 +156,6 @@ MainTemplate.prototype.renderAddModule = function(hash, chunk, varModuleId, varM
162156

163157
MainTemplate.prototype.updateHash = function(hash) {
164158
hash.update("maintemplate");
165-
hash.update("1");
159+
hash.update("2");
166160
hash.update(this.outputOptions.publicPath + "");
167161
};

lib/Template.js

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
MIT License http://www.opensource.org/licenses/mit-license.php
33
Author Tobias Koppers @sokra
44
*/
5+
var ConcatSource = require("webpack-core/lib/ConcatSource");
6+
57
function Template(outputOptions) {
68
this.outputOptions = outputOptions || {};
79
}
@@ -35,3 +37,47 @@ Template.prototype.asString = function(str) {
3537
}
3638
return str;
3739
};
40+
41+
Template.prototype.renderChunkModules = function(chunk, moduleTemplate, dependencyTemplates, prefix) {
42+
if(!prefix) prefix = "";
43+
var source = new ConcatSource();
44+
var maxId = chunk.modules[chunk.modules.length-1].id;
45+
var minId = chunk.modules[0].id;
46+
if(minId < 16 + (""+minId).length) {
47+
minId = 0;
48+
}
49+
var objectOverhead = chunk.modules.map(function(module) {
50+
return (module.id + "").length + 2;
51+
}).reduce(function(a, b) { return a + b }, -1);
52+
var arrayOverhead = minId === 0 ? maxId : 16 + (""+minId).length + maxId;
53+
if(arrayOverhead < objectOverhead) {
54+
// Render a sparse array
55+
if(minId !== 0) source.add("Array(" + minId + ").concat(");
56+
source.add("[\n");
57+
var modules = {};
58+
chunk.modules.forEach(function(module) {
59+
modules[module.id] = module;
60+
});
61+
for(var idx = minId; idx <= maxId; idx++) {
62+
var module = modules[idx];
63+
if(idx != minId) source.add(",\n");
64+
source.add("/* " + idx + " */");
65+
if(module) {
66+
source.add("\n");
67+
source.add(moduleTemplate.render(module, dependencyTemplates, chunk));
68+
}
69+
}
70+
source.add("\n" + prefix + "]");
71+
if(minId !== 0) source.add(")");
72+
} else {
73+
// Render an object
74+
source.add("{\n");
75+
chunk.modules.forEach(function(module, idx) {
76+
if(idx != 0) source.add(",\n");
77+
source.add("\n/***/ " + module.id + ":\n");
78+
source.add(moduleTemplate.render(module, dependencyTemplates, chunk));
79+
});
80+
source.add("\n\n" + prefix + "}");
81+
}
82+
return source;
83+
};

0 commit comments

Comments
 (0)