local-module support for CJS and AMD require

fixes #153
This commit is contained in:
Tobias Koppers 2014-01-24 13:13:21 +01:00
parent f599bb5edf
commit d1f466e745
3 changed files with 37 additions and 3 deletions

View File

@ -7,7 +7,9 @@ var AMDRequireItemDependency = require("./AMDRequireItemDependency");
var AMDRequireArrayDependency = require("./AMDRequireArrayDependency");
var AMDRequireContextDependency = require("./AMDRequireContextDependency");
var AMDRequireDependenciesBlock = require("./AMDRequireDependenciesBlock");
var LocalModuleDependency = require("./LocalModuleDependency");
var ContextDependencyHelpers = require("./ContextDependencyHelpers");
var LocalModulesHelpers = require("./LocalModulesHelpers");
module.exports = AbstractPlugin.create({
"call require": function(expr) {
@ -66,9 +68,13 @@ module.exports = AbstractPlugin.create({
} else if(param.isConstArray()) {
var deps = [];
param.array.forEach(function(request) {
var dep;
var dep, localModule;
if(["require", "exports", "module"].indexOf(request) >= 0) {
dep = request;
} else if(localModule = LocalModulesHelpers.getLocalModule(this.state, request)) {
dep = new LocalModuleDependency(localModule);
dep.loc = expr.loc;
this.state.current.addDependency(dep);
} else {
dep = new AMDRequireItemDependency(request);
dep.loc = expr.loc;
@ -94,9 +100,11 @@ module.exports = AbstractPlugin.create({
}, this);
return true;
} else if(param.isString()) {
var dep;
var dep, localModule;
if(["require","exports","module"].indexOf(param.string) >= 0) {
dep = new ConstDependency(param.string, param.range);
} else if(localModule = LocalModulesHelpers.getLocalModule(this.state, param.string)) {
dep = new LocalModuleDependency(localModule, param.range);
} else {
dep = new AMDRequireItemDependency(param.string, param.range);
}

View File

@ -7,7 +7,9 @@ var ConstDependency = require("./ConstDependency");
var CommonJsRequireDependency = require("./CommonJsRequireDependency");
var CommonJsRequireContextDependency = require("./CommonJsRequireContextDependency");
var RequireHeaderDependency = require("./RequireHeaderDependency");
var LocalModuleDependency = require("./LocalModuleDependency");
var ContextDependencyHelpers = require("./ContextDependencyHelpers");
var LocalModulesHelpers = require("./LocalModulesHelpers");
module.exports = AbstractPlugin.create({
"expression require.cache": function(expr) {
@ -23,6 +25,7 @@ module.exports = AbstractPlugin.create({
},
"call require": function(expr) {
if(expr.arguments.length !== 1) return;
var localModule;
var param = this.evaluateExpression(expr.arguments[0]);
if(param.isConditional()) {
this.state.current.addDependency(new RequireHeaderDependency(expr.callee.range));
@ -33,6 +36,11 @@ module.exports = AbstractPlugin.create({
}
}, this);
return true;
} else if(param.isString() && (localModule = LocalModulesHelpers.getLocalModule(this.state, param.string))) {
var dep = new LocalModuleDependency(localModule, expr.range);
dep.loc = expr.loc;
this.state.current.addDependency(dep);
return true;
} else {
var result = this.applyPluginsBailResult("call require:commonjs:item", expr, param);
if(result === undefined) {

View File

@ -1,8 +1,26 @@
it("should not create a context for typeof require", function() {
it("should define and require a local module", function() {
module.exports = "not set";
define("my-module", function() {
return 1234;
});
module.exports.should.be.eql("not set");
define(["my-module"], function(myModule) {
myModule.should.be.eql(1234);
return 2345;
});
module.exports.should.be.eql(2345);
require("my-module").should.be.eql(1234);
require(["my-module"]);
});
it("should not create a chunk for a AMD require to a local module", function() {
define("my-module2", function() {
return 1235;
});
var sync = false;
require(["my-module2"], function(myModule2) {
myModule2.should.be.eql(1235);
sync = true;
});
sync.should.be.eql(true);
});