Fix context modules

This commit is contained in:
Tobias Koppers 2013-02-04 12:34:20 +01:00
parent 8a4bb64611
commit 453c0226aa
4 changed files with 31 additions and 12 deletions

View File

@ -42,7 +42,7 @@ ContextModule.prototype.readableIdentifier = function(requestShortener) {
if(!this.recursive)
identifier += "nonrecursive ";
if(this.addon)
identifier += this.addon;
identifier += requestShortener.shorten(this.addon);
if(this.regExp)
identifier += prettyRegExp(this.regExp + "");
return identifier.replace(/ $/, "");

View File

@ -30,22 +30,31 @@ ContextModuleFactory.prototype.create = function(context, dependency, callback)
var recursive = result.recursive;
var regExp = result.regExp;
var loaders, resource;
var loaders, resource, loadersPrefix = "";
var idx = request.lastIndexOf("!");
if(idx >= 0) {
loaders = request.substr(0, idx+1);
for(var i = 0; i < loaders.length && loaders[i] === "!"; i++) {
loadersPrefix += "!";
}
loaders = loaders.substr(i).replace(/!+$/, "").replace(/!!+/g, "!");
if(loaders == "") loaders = [];
else loaders = loaders.split("!");
resource = request.substr(idx+1);
} else {
loaders = "";
loaders = [];
resource = request;
}
this.resolvers.context.resolve(context, resource, function(err, resource) {
async.parallel([
this.resolvers.context.resolve.bind(this.resolvers.context, context, resource),
async.map.bind(async, loaders, this.resolvers.loader.resolve.bind(this.resolvers.loader, context))
], function(err, result) {
if(err) return callback(err);
this.applyPluginsAsyncWaterfall("after-resolve", {
loaders: loaders,
resource: resource,
loaders: loadersPrefix + result[1].join("!") + (result[1].length > 0 ? "!" : ""),
resource: result[0],
recursive: recursive,
regExp: regExp
}, function(err, result) {
@ -56,6 +65,7 @@ ContextModuleFactory.prototype.create = function(context, dependency, callback)
}.bind(this));
}.bind(this));
};
ContextModuleFactory.prototype.resolveDependencies = function resolveDependencies(fs, resource, recursive, regExp, callback) {
(function addDirectory(directory, callback) {
fs.readdir(directory, function(err, files) {
@ -71,9 +81,9 @@ ContextModuleFactory.prototype.resolveDependencies = function resolveDependencie
if(!recursive) return callback();
addDirectory.call(this, subResource, callback);
} else if(stat.isFile()) {
var obj = {
context: resource,
request: "." + subResource.substr(resource.length).replace(/\\/g, "/")
@ -88,16 +98,16 @@ ContextModuleFactory.prototype.resolveDependencies = function resolveDependencie
});
callback(null, alternatives);
});
} else callback();
}.bind(this));
}.bind(this), function(err, result) {
if(err) return callback(err);
if(!result) return callback();
callback(null, result.filter(function(i) { return !!i; }).reduce(function(a, i) {
return a.concat(i);
}, []));

View File

@ -1,6 +1,6 @@
{
"name": "webpack",
"version": "0.9.0-beta4",
"version": "0.9.0-beta5",
"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": {

View File

@ -159,6 +159,15 @@ describe("main", function() {
require("../resources/" + scr).should.be.eql("coffee test");
require("raw!../resources/" + abc + ".txt").should.be.eql("abc");
});
it("should resolve loaders relative to require", function() {
var index = "index";
require("../loaders/queryloader?query!../node_modules/subcontent/" + index + ".js").should.be.eql({
resourceQuery: null,
query: "?query",
prev: "module.exports = \"error\";"
});
});
});
describe("parsing", function() {