follow the browser-module spec: ignoring export an empty module.

fixes #187
This commit is contained in:
Tobias Koppers 2014-03-01 20:07:42 +01:00
parent b88938ceea
commit 83eec78bf0
6 changed files with 86 additions and 1 deletions

View File

@ -6,6 +6,7 @@ var async = require("async");
var Tapable = require("tapable");
var NormalModule = require("./NormalModule");
var RawModule = require("./RawModule");
var LoadersList = require("webpack-core/lib/LoadersList");
function NormalModuleFactory(context, resolvers, parser, options) {
@ -55,7 +56,11 @@ NormalModuleFactory.prototype.create = function(context, dependency, callback) {
var loaders = results[0];
resource = results[1];
if(resource === false) return callback(); // ignored
if(resource === false)
return callback(null,
new RawModule("/* (ignored) */",
"ignored " + context + " " + request,
request + " (ignored)")); // ignored
var userRequest = loaders.concat([resource]).join("!");

65
lib/RawModule.js Normal file
View File

@ -0,0 +1,65 @@
/*
MIT License http://www.opensource.org/licenses/mit-license.php
Author Tobias Koppers @sokra
*/
var Module = require("./Module");
var OriginalSource = require("webpack-core/lib/OriginalSource");
var RawSource = require("webpack-core/lib/RawSource");
function RawModule(source, identifier, readableIdentifier) {
Module.call(this);
this.sourceStr = source;
this.identifierStr = identifier || this.sourceStr;
this.readableIdentifierStr = readableIdentifier || this.identifierStr;
this.cacheable = true;
this.built = false;
}
module.exports = RawModule;
RawModule.prototype = Object.create(Module.prototype);
RawModule.prototype.identifier = function() {
return this.identifierStr;
};
RawModule.prototype.readableIdentifier = function(requestShortener) {
return requestShortener.shorten(this.readableIdentifierStr);
};
RawModule.prototype.needRebuild = function(fileTimestamps, contextTimestamps) {
return false;
};
RawModule.prototype.build = function(options, compilation, resolver, fs, callback) {
this.builtTime = new Date().getTime();
callback();
};
RawModule.prototype.source = function(dependencyTemplates, outputOptions, requestShortener) {
if(this.useSourceMap)
return new OriginalSource(this.sourceStr, this.identifier());
else
return new RawSource(this.sourceStr);
};
RawModule.prototype.size = function() {
return this.sourceStr.length;
};
RawModule.prototype.getSourceHash = function() {
var hash = require("crypto").createHash("md5");
hash.update(this.sourceStr);
return hash.digest("hex");
};
RawModule.prototype.getAllModuleDependencies = function() {
return [];
};
RawModule.prototype.createTemplate = function() {
return new RawModule(this.sourceStr, "template of " + this.id);
};
RawModule.prototype.getTemplateArguments = function() {
return [];
};

View File

@ -28,6 +28,12 @@ it("should ignore recursive module mappings", function() {
require("recursive-module").should.be.eql("new-module");
});
it("should use empty modules for ignored modules", function() {
require("ignoring-module").module.should.be.eql({});
require("ignoring-module").file.should.be.eql({});
require("ignoring-module").module.should.not.be.equal(require("ignoring-module").file);
});
// Errors
require.include("recursive-file/a");
require.include("recursive-file/b");

View File

@ -0,0 +1 @@
throw new Error("Fail");

View File

@ -0,0 +1,2 @@
exports.module = require("wrong-module");
exports.file = require("./file");

View File

@ -0,0 +1,6 @@
{
"browser": {
"wrong-module": false,
"./file.js": false
}
}