Skip to content

Commit 5a56be9

Browse files
authored
Merge pull request webpack#3368 from webpack/update/node-libs-browser
Update node-libs-browser@^0.7.0 and backport changes from webpack-2 to NodeSourcePlugin
2 parents 1a5fd7e + c1d6ed8 commit 5a56be9

File tree

3 files changed

+37
-25
lines changed

3 files changed

+37
-25
lines changed

lib/node/NodeSourcePlugin.js

Lines changed: 28 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,31 @@
55
var ModuleAliasPlugin = require("enhanced-resolve/lib/ModuleAliasPlugin");
66
var ModuleParserHelpers = require("../ModuleParserHelpers");
77
var nodeLibsBrowser = require("node-libs-browser");
8+
var path = require("path");
89

910
function NodeSourcePlugin(options) {
1011
this.options = options;
1112
}
1213
module.exports = NodeSourcePlugin;
1314
NodeSourcePlugin.prototype.apply = function(compiler) {
15+
var parser = compiler.parser;
16+
17+
function buildExpression(context, pathToModule) {
18+
var moduleJsPath = path.relative(context, pathToModule);
19+
if(!/^[A-Z]:/i.test(moduleJsPath)) {
20+
moduleJsPath = "./" + moduleJsPath.replace(/\\/g, "/");
21+
}
22+
return "require(" + JSON.stringify(moduleJsPath) + ")";
23+
}
24+
25+
function addExpression(parser, name, module, type, suffix) {
26+
suffix = suffix || "";
27+
parser.plugin("expression " + name, function() {
28+
if(this.state.module && this.state.module.resource === getPathToModule(module, type)) return;
29+
return ModuleParserHelpers.addParsedVariable(this, name, buildExpression(this.state.module.context, getPathToModule(module, type)) + suffix);
30+
});
31+
}
32+
1433
function getPathToModule(module, type) {
1534
if(type === true || (type === undefined && nodeLibsBrowser[module])) {
1635
if(!nodeLibsBrowser[module]) throw new Error("No browser version for node.js core module '" + module + "' available");
@@ -21,23 +40,20 @@ NodeSourcePlugin.prototype.apply = function(compiler) {
2140
return require.resolve("node-libs-browser/mock/empty");
2241
} else return module;
2342
}
24-
if(this.options.process) {
25-
var processType = this.options.process;
26-
compiler.parser.plugin("expression process", function() {
27-
return ModuleParserHelpers.addParsedVariable(this, "process", "require(" + JSON.stringify(getPathToModule("process", processType)) + ")");
28-
});
29-
}
43+
3044
if(this.options.global) {
3145
compiler.parser.plugin("expression global", function() {
3246
this.state.module.addVariable("global", "(function() { return this; }())");
3347
return true;
3448
});
3549
}
50+
if(this.options.process) {
51+
var processType = this.options.process;
52+
addExpression(parser, "process", "process", processType);
53+
}
3654
if(this.options.console) {
3755
var consoleType = this.options.console;
38-
compiler.parser.plugin("expression console", function() {
39-
return ModuleParserHelpers.addParsedVariable(this, "console", "require(" + JSON.stringify(getPathToModule("console", consoleType)) + ")");
40-
});
56+
addExpression(parser, "console", "console", consoleType);
4157
}
4258
var bufferType = this.options.Buffer;
4359
if(typeof bufferType === "undefined") {
@@ -46,18 +62,12 @@ NodeSourcePlugin.prototype.apply = function(compiler) {
4662
bufferType = true;
4763
}
4864
if(bufferType) {
49-
compiler.parser.plugin("expression Buffer", function() {
50-
return ModuleParserHelpers.addParsedVariable(this, "Buffer", "require(" + JSON.stringify(getPathToModule("buffer", bufferType)) + ").Buffer");
51-
});
65+
addExpression(parser, "Buffer", "buffer", bufferType, ".Buffer");
5266
}
5367
if(this.options.setImmediate) {
5468
var setImmediateType = this.options.setImmediate;
55-
compiler.parser.plugin("expression setImmediate", function() {
56-
return ModuleParserHelpers.addParsedVariable(this, "setImmediate", "require(" + JSON.stringify(getPathToModule("timers", setImmediateType)) + ").setImmediate");
57-
});
58-
compiler.parser.plugin("expression clearImmediate", function() {
59-
return ModuleParserHelpers.addParsedVariable(this, "clearImmediate", "require(" + JSON.stringify(getPathToModule("timers", setImmediateType)) + ").clearImmediate");
60-
});
69+
addExpression(parser, "setImmediate", "timers", setImmediateType, ".setImmediate");
70+
addExpression(parser, "clearImmediate", "timers", setImmediateType, ".clearImmediate");
6171
}
6272
var options = this.options;
6373
compiler.plugin("after-resolvers", function(compiler) {

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@
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 loaders to preprocess files, i.e. json, jade, coffee, css, less, ... and your custom stuff.",
66
"dependencies": {
7+
"acorn": "^3.0.0",
78
"async": "^1.3.0",
89
"clone": "^1.0.2",
910
"enhanced-resolve": "~0.9.0",
10-
"acorn": "^3.0.0",
1111
"interpret": "^0.6.4",
1212
"loader-utils": "^0.2.11",
1313
"memory-fs": "~0.3.0",
1414
"mkdirp": "~0.5.0",
15-
"node-libs-browser": "^0.6.0",
15+
"node-libs-browser": "^0.7.0",
1616
"optimist": "~0.6.0",
1717
"supports-color": "^3.1.0",
1818
"tapable": "~0.1.8",

test/configCases/target/web/index.js

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
require("should");
22

3-
// shimming global window object so the http-module is happy.
4-
// window is assigned without var on purpose.
5-
window = {
6-
XMLHttpRequest: function() {}
7-
};
3+
// shimming global XMLHttpRequest object so the http-module is happy.
4+
global.XMLHttpRequest = function() {};
5+
global.XMLHttpRequest.prototype.open = function() {};
86

97
it("should provide a global Buffer constructor", function() {
108
Buffer.should.be.a.Function;
@@ -34,6 +32,10 @@ it("should provide an assert shim", function () {
3432
require("assert").should.be.a.Function;
3533
});
3634

35+
it("should provide a util shim", function () {
36+
require("util").should.be.an.Object;
37+
});
38+
3739
it("should provide a buffer shim", function () {
3840
require("buffer").should.be.an.Object;
3941
});

0 commit comments

Comments
 (0)