Skip to content

Commit f5290b0

Browse files
committed
better compressed require.context
1 parent 03c812a commit f5290b0

File tree

2 files changed

+31
-13
lines changed

2 files changed

+31
-13
lines changed

lib/writeSource.js

Lines changed: 30 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,23 +8,41 @@ module.exports = function(module, options, toRealId, toRealChuckId) {
88
if(typeof module.source !== "string") {
99
// if no source is avalible, try to generate it
1010
if(module.requireMap) { // with a require map
11-
var extensions = (options.resolve && options.resolve.extensions) || [".web.js", ".js"];
12-
var extensionsAccess = [];
13-
extensions.forEach(function(ext) {
14-
extensionsAccess.push("map[name+\"" +
15-
ext.replace(/\\/g, "\\\\").replace(/"/g, "\\\"") +
16-
"\"]");
17-
});
11+
var extensions = ((options.resolve && options.resolve.extensions) || ["", ".web.js", ".js"]).slice();
1812
var realRequireMap = {};
13+
var usedExtensions = [];
1914
Object.keys(module.requireMap).sort().forEach(function(file) {
20-
realRequireMap[file] = toRealId(module.requireMap[file]);
15+
var realId = toRealId(module.requireMap[file]);
16+
if(!realId) realId = realId + ""; // not cause a bug if realId === 0
17+
realRequireMap[file] = realId;
18+
for(var i = 0; i < extensions.length; i++) {
19+
var ext = extensions[i]
20+
var idx = file.lastIndexOf(ext);
21+
if(idx >= 0 && idx === file.length - ext.length) {
22+
usedExtensions.push(ext);
23+
extensions.splice(i, 1);
24+
i--;
25+
}
26+
}
27+
});
28+
var extensionsAccess = [];
29+
usedExtensions.forEach(function(ext) {
30+
if(ext === "")
31+
extensionsAccess.push("map[name]");
32+
else
33+
extensionsAccess.push("map[name+" + JSON.stringify(ext) + "]");
2134
});
2235

23-
result = "/***/\tvar map = " + JSON.stringify(realRequireMap) + ",\n" +
24-
"/***/\trequireInContext = module.exports = function(name) {\n" +
25-
"/***/\t\treturn require(" + extensionsAccess.join(" || ") + "||name);\n" +
36+
result = "/***/\tvar map = " + JSON.stringify(realRequireMap) + ";\n" +
37+
"/***/\texports = module.exports = function(name) {\n" +
38+
"/***/\t\treturn require(exports.id(name) || name)\n" +
39+
"/***/\t};\n" +
40+
"/***/\texports.id = function(name) {\n" +
41+
"/***/\t\treturn " + extensionsAccess.join(" || ") + ";\n" +
2642
"/***/\t};\n" +
27-
"/***/\trequireInContext.keys = function() { return Object.keys(map) }";
43+
"/***/\texports.keys = function() {\n" +
44+
"/***/\t\treturn Object.keys(map);\n" +
45+
"/***/\t};";
2846
} else
2947
return;
3048
} else {

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "webpack",
3-
"version": "0.7.8",
3+
"version": "0.7.9",
44
"author": "Tobias Koppers @sokra",
55
"description": "Packs CommonJs/AMD 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.",
66
"dependencies": {

0 commit comments

Comments
 (0)