Skip to content

Commit 9c3e74a

Browse files
committed
splitted require polyfill into extra module
1 parent 578ea17 commit 9c3e74a

4 files changed

Lines changed: 4 additions & 160 deletions

File tree

.travis.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
language: node_js
22
node_js:
3-
- 0.6
3+
- 0.6
4+
- 0.8

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
"optimist": "0.2.x",
99
"uglify-js": "1.2.x",
1010
"sprintf": "0.1.x",
11+
"enhanced-require": "0.1.x",
1112
"raw-loader": "0.1.x",
1213
"json-loader": "0.1.x",
1314
"jade-loader": "0.1.x",

require-polyfill.js

Lines changed: 1 addition & 157 deletions
Original file line numberDiff line numberDiff line change
@@ -1,157 +1 @@
1-
// Polyfill for node.js
2-
// - adds require.ensure
3-
// - adds require.context
4-
// call it like this:
5-
// require = require("webpack/require-polyfill")(require.valueOf());
6-
// This is only required when you want to use the special require.xxx methods
7-
// in server-side code which should be so only in rar cases.
8-
module.exports = function(req) {
9-
if(!req.webpackPolyfill) {
10-
var oldReq = req;
11-
req = function(name) {
12-
if(name.indexOf("!") !== -1) {
13-
var items = name.replace(/^!|!$/g, "").replace(/!!/g, "!").split(/!/g);
14-
var resource = oldReq.resolve(items.pop());
15-
var resolved = [];
16-
items.forEach(function(item, index) {
17-
var relative = false;
18-
if(item.length > 2 &&
19-
item[0] === ".") {
20-
if(item[1] === "/")
21-
relative = true;
22-
else if(item.length > 3 &&
23-
item[1] === "." &&
24-
item[2] === "/")
25-
relative = true;
26-
}
27-
if(item.length > 3 &&
28-
item[1] === ":" &&
29-
item[2] === "\\")
30-
relative = true;
31-
var tries = [];
32-
if(!relative) {
33-
module.exports.options.resolve.loaderPostfixes.forEach(function(postfix) {
34-
if(item.indexOf("/") !== -1)
35-
tries.push(item.replace("/", postfix+"/"));
36-
else
37-
tries.push(item + postfix);
38-
});
39-
}
40-
tries.push(item);
41-
var extensions = module.exports.options.resolve.loaderExtensions;
42-
for(var i = 0; i < tries.length; i++) {
43-
for(var ext = 0; ext < extensions.length; ext++) {
44-
try {
45-
var file = oldReq.resolve(tries[i] + extensions[ext]);
46-
} catch(e) {}
47-
if(file) {
48-
resolved.push(file);
49-
break;
50-
}
51-
}
52-
if(ext !== extensions.length)
53-
break;
54-
}
55-
if(i === tries.length)
56-
throw new Error("Cannot find loader module '"+item+"'");
57-
});
58-
resolved = resolved.reverse();
59-
var cacheLine = resolved.join("!") + "!" + resource;
60-
var cacheEntry = oldReq.cache[cacheLine];
61-
if(cacheEntry)
62-
return cacheEntry;
63-
var content = [require("fs").readFileSync(resource, "utf-8")];
64-
var values;
65-
function exec(code, filename) {
66-
var Module = require("module");
67-
var m = new Module("exec in " + cacheLine, module);
68-
m.filename = resource;
69-
m.paths = Module._nodeModulePaths(require("path").dirname(resource));
70-
m._compile("require = require(" + JSON.stringify(__filename) + ")(require.valueOf());" + code, filename);
71-
return m.exports;
72-
}
73-
resolved.forEach(function(loader) {
74-
var set = false, err = null;
75-
var context = {
76-
request: cacheLine,
77-
filenames: [resource],
78-
exec: exec,
79-
resolve: function(context, path, cb) {
80-
try {
81-
var Module = require("module");
82-
var virtModule = new Module(".", null);
83-
virtModule.filename = require("path").join(context, "resolve.js");
84-
virtModule.paths = Module._nodeModulePaths(context);
85-
cb(null, Module._resolveFilename(path, virtModule));
86-
} catch(e) { cb(e); }
87-
},
88-
async: function() { return false; },
89-
callback: function() {
90-
set = true;
91-
content = Array.prototype.slice.apply(arguments);
92-
err = content.shift();
93-
values = context.values;
94-
},
95-
options: module.exports.options,
96-
minimize: module.exports.options.minimize,
97-
debug: module.exports.options.debug,
98-
web: false,
99-
inputValues: values,
100-
values: undefined
101-
};
102-
var retVal = oldReq(loader).apply(context, content);
103-
if(set) {
104-
if(err) throw err;
105-
} else {
106-
content = [retVal];
107-
values = context.values;
108-
}
109-
});
110-
var ret;
111-
if(values !== undefined)
112-
ret = values[0];
113-
else
114-
ret = exec(content[0], cacheLine);
115-
oldReq.cache[cacheLine] = ret;
116-
return ret;
117-
} else {
118-
var resolved = oldReq.resolve(name);
119-
var match = false;
120-
var loaders = module.exports.options.resolve.loaders;
121-
for(var i = 0; i < loaders.length; i++)
122-
if(loaders[i].test.test(resolved))
123-
return req(loaders[i].loader + "!" + name);
124-
125-
return oldReq(name);
126-
}
127-
};
128-
req.__proto__ = oldReq;
129-
req.webpackPolyfill = true;
130-
}
131-
if(!req.ensure) {
132-
req.ensure = function(array, callback) {
133-
callback(req);
134-
};
135-
}
136-
if(!req.context) {
137-
req.context = function(contextName) {
138-
return function(name) {
139-
return req(contextName + "/" + name);
140-
}
141-
}
142-
}
143-
return req;
144-
}
145-
var options = module.exports.options = {
146-
resolve: {
147-
loaders: [
148-
{test: /\.coffee$/, loader: "coffee"},
149-
// {test: /\.json$/, loader: "json"}, // This works out of the box in node.js
150-
{test: /\.jade$/, loader: "jade"},
151-
{test: /\.css$/, loader: "style!css"},
152-
{test: /\.less$/, loader: "style!css!val!less"}
153-
],
154-
loaderExtensions: [".webpack-loader.js", ".loader.js", ".js", ""],
155-
loaderPostfixes: ["-webpack-loader", "-loader", ""]
156-
}
157-
};
1+
module.exports = require("enhanced-require")

require-polyfill.web.js

Lines changed: 0 additions & 2 deletions
This file was deleted.

0 commit comments

Comments
 (0)