diff --git a/index.js b/index.js index 54d3733..1477b2f 100644 --- a/index.js +++ b/index.js @@ -1,7 +1,9 @@ /* - MIT License http://www.opensource.org/licenses/mit-license.php - Author Tobias Koppers @sokra -*/ + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra + Modified version, created by Richard Scarrott @richardscarrott + */ + var loaderUtils = require("loader-utils"); module.exports = function() {}; @@ -14,54 +16,111 @@ module.exports.pitch = function(remainingRequest) { regExp: query.regExp }; var chunkName = loaderUtils.interpolateName(this, query.name, options); - var chunkNameParam = ", " + JSON.stringify(chunkName); + var chunkNameParam = ", " + JSON.stringify(chunkName); } else { var chunkNameParam = ''; } var result; if(query.lazy) { result = [ - "module.exports = function(cb) {\n", - " require.ensure([], function(require) {\n", - " cb(require(", loaderUtils.stringifyRequest(this, "!!" + remainingRequest), "));\n", - " }" + chunkNameParam + ");\n", - "}"]; + "module.exports = function(cb, err) {", + " require.ensure([], function() {", + " cb(require(", loaderUtils.stringifyRequest(this, "!!" + remainingRequest), "));", + " }, function() {", + " if (err) err.apply(this, arguments);", + " }" + chunkNameParam + ");", + "};"]; } else { result = [ - "var cbs = [], \n", - " data;\n", - "module.exports = function(cb) {\n", - " if(cbs) cbs.push(cb);\n", - " else cb(data);\n", - "}\n", - "require.ensure([], function(require) {\n", - " data = require(", loaderUtils.stringifyRequest(this, "!!" + remainingRequest), ");\n", - " var callbacks = cbs;\n", - " cbs = null;\n", - " for(var i = 0, l = callbacks.length; i < l; i++) {\n", - " callbacks[i](data);\n", - " }\n", - "}" + chunkNameParam + ");"]; + "var cbs,", + " data,", + " error = false;", + "module.exports = function(cb, err) {", + " err = err || function() {};", + " if (data) {", + " cb(data);", + " } else {", + " if (error) {", + " // Try again.", + " requireBundle();", + " }", + " cbs.push({", + " success: cb,", + " error: err", + " });", + " }", + "};", + "function requireBundle() {", + " cbs = [];", + " require.ensure([], function() {", + " data = require(", loaderUtils.stringifyRequest(this, "!!" + remainingRequest), ");", + " for(var i = 0, l = cbs.length; i < l; i++) {", + " cbs[i].success(data);", + " }", + " error = false;", + " cbs = null;", + " }, function() {", + " for(var i = 0, l = cbs.length; i < l; i++) {", + " cbs[i].error.apply(this, arguments);", + " }", + " error = true;", + " cbs = null;", + " }" + chunkNameParam + ");", + "}", + "requireBundle();" + ]; } - return result.join(""); -} + return result.join("\n"); +}; /* Output format: - var cbs = [], - data; - module.exports = function(cb) { - if(cbs) cbs.push(cb); - else cb(data); - } - require.ensure([], function(require) { - data = require("xxx"); - var callbacks = cbs; - cbs = null; - for(var i = 0, l = callbacks.length; i < l; i++) { - callbacks[i](data); + // lazy + module.exports = function(cb, err) { + require.ensure([], function() {", + cb(require("xxx")); + }, function() { + if (err) err.apply(this, arguments); + }, 'name'); + }; + + // non-lazy...kind of dupes the __webpack_require__.e callback handling a little... + var cbs, + data, + error = false; + module.exports = function(cb, err) { + err = err || function() {}; + if (data) { + cb(data); + } else { + if (error) { + // Try again. + requireBundle(); + } + cbs.push({ + success: cb, + error: err + }); } - }); + }; + function requireBundle() { + cbs = []; + require.ensure([], function(require) { + data = require("xxx"); + for(var i = 0, l = cbs.length; i < l; i++) { + cbs[i].success(data); + } + error = false; + cbs = null; + }, function() { + for(var i = 0, l = cbs.length; i < l; i++) { + cbs[i].error.apply(this, arguments); + } + error = true; + cbs = null; + }); + } + requireBundle(); -*/ +*/ \ No newline at end of file diff --git a/package.json b/package.json index faa48f0..b2c65bd 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,9 @@ "scripts": { "release": "standard-version" }, + "peerDependencies": { + "webpack": ">=2.4.0" + }, "dependencies": { "loader-utils": "^1.1.0" },