Skip to content

Commit

Permalink
Update node-libs-browser@^0.7.0 and backport changes from webpack-2 t…
Browse files Browse the repository at this point in the history
…o NodeSourcePlugin
  • Loading branch information
jhnns committed Nov 24, 2016
1 parent 1a5fd7e commit c1d6ed8
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 25 deletions.
46 changes: 28 additions & 18 deletions lib/node/NodeSourcePlugin.js
Expand Up @@ -5,12 +5,31 @@
var ModuleAliasPlugin = require("enhanced-resolve/lib/ModuleAliasPlugin");
var ModuleParserHelpers = require("../ModuleParserHelpers");
var nodeLibsBrowser = require("node-libs-browser");
var path = require("path");

function NodeSourcePlugin(options) {
this.options = options;
}
module.exports = NodeSourcePlugin;
NodeSourcePlugin.prototype.apply = function(compiler) {
var parser = compiler.parser;

function buildExpression(context, pathToModule) {
var moduleJsPath = path.relative(context, pathToModule);
if(!/^[A-Z]:/i.test(moduleJsPath)) {
moduleJsPath = "./" + moduleJsPath.replace(/\\/g, "/");
}
return "require(" + JSON.stringify(moduleJsPath) + ")";
}

function addExpression(parser, name, module, type, suffix) {
suffix = suffix || "";
parser.plugin("expression " + name, function() {
if(this.state.module && this.state.module.resource === getPathToModule(module, type)) return;
return ModuleParserHelpers.addParsedVariable(this, name, buildExpression(this.state.module.context, getPathToModule(module, type)) + suffix);
});
}

function getPathToModule(module, type) {
if(type === true || (type === undefined && nodeLibsBrowser[module])) {
if(!nodeLibsBrowser[module]) throw new Error("No browser version for node.js core module '" + module + "' available");
Expand All @@ -21,23 +40,20 @@ NodeSourcePlugin.prototype.apply = function(compiler) {
return require.resolve("node-libs-browser/mock/empty");
} else return module;
}
if(this.options.process) {
var processType = this.options.process;
compiler.parser.plugin("expression process", function() {
return ModuleParserHelpers.addParsedVariable(this, "process", "require(" + JSON.stringify(getPathToModule("process", processType)) + ")");
});
}

if(this.options.global) {
compiler.parser.plugin("expression global", function() {
this.state.module.addVariable("global", "(function() { return this; }())");
return true;
});
}
if(this.options.process) {
var processType = this.options.process;
addExpression(parser, "process", "process", processType);
}
if(this.options.console) {
var consoleType = this.options.console;
compiler.parser.plugin("expression console", function() {
return ModuleParserHelpers.addParsedVariable(this, "console", "require(" + JSON.stringify(getPathToModule("console", consoleType)) + ")");
});
addExpression(parser, "console", "console", consoleType);
}
var bufferType = this.options.Buffer;
if(typeof bufferType === "undefined") {
Expand All @@ -46,18 +62,12 @@ NodeSourcePlugin.prototype.apply = function(compiler) {
bufferType = true;
}
if(bufferType) {
compiler.parser.plugin("expression Buffer", function() {
return ModuleParserHelpers.addParsedVariable(this, "Buffer", "require(" + JSON.stringify(getPathToModule("buffer", bufferType)) + ").Buffer");
});
addExpression(parser, "Buffer", "buffer", bufferType, ".Buffer");
}
if(this.options.setImmediate) {
var setImmediateType = this.options.setImmediate;
compiler.parser.plugin("expression setImmediate", function() {
return ModuleParserHelpers.addParsedVariable(this, "setImmediate", "require(" + JSON.stringify(getPathToModule("timers", setImmediateType)) + ").setImmediate");
});
compiler.parser.plugin("expression clearImmediate", function() {
return ModuleParserHelpers.addParsedVariable(this, "clearImmediate", "require(" + JSON.stringify(getPathToModule("timers", setImmediateType)) + ").clearImmediate");
});
addExpression(parser, "setImmediate", "timers", setImmediateType, ".setImmediate");
addExpression(parser, "clearImmediate", "timers", setImmediateType, ".clearImmediate");
}
var options = this.options;
compiler.plugin("after-resolvers", function(compiler) {
Expand Down
4 changes: 2 additions & 2 deletions package.json
Expand Up @@ -4,15 +4,15 @@
"author": "Tobias Koppers @sokra",
"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.",
"dependencies": {
"acorn": "^3.0.0",
"async": "^1.3.0",
"clone": "^1.0.2",
"enhanced-resolve": "~0.9.0",
"acorn": "^3.0.0",
"interpret": "^0.6.4",
"loader-utils": "^0.2.11",
"memory-fs": "~0.3.0",
"mkdirp": "~0.5.0",
"node-libs-browser": "^0.6.0",
"node-libs-browser": "^0.7.0",
"optimist": "~0.6.0",
"supports-color": "^3.1.0",
"tapable": "~0.1.8",
Expand Down
12 changes: 7 additions & 5 deletions test/configCases/target/web/index.js
@@ -1,10 +1,8 @@
require("should");

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

it("should provide a global Buffer constructor", function() {
Buffer.should.be.a.Function;
Expand Down Expand Up @@ -34,6 +32,10 @@ it("should provide an assert shim", function () {
require("assert").should.be.a.Function;
});

it("should provide a util shim", function () {
require("util").should.be.an.Object;
});

it("should provide a buffer shim", function () {
require("buffer").should.be.an.Object;
});
Expand Down

0 comments on commit c1d6ed8

Please sign in to comment.