Skip to content

Commit 0f25ccf

Browse files
committed
fixes webpack#202
1 parent 5ab7bf3 commit 0f25ccf

File tree

3 files changed

+37
-3
lines changed

3 files changed

+37
-3
lines changed

lib/dependencies/AMDDefineDependency.js

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,44 +23,60 @@ AMDDefineDependency.Template.prototype.apply = function(dep, source, outputOptio
2323
var localModuleVar = dep.localModule && dep.localModule.used && dep.localModule.variableName();
2424
if(localModuleVar) {
2525
if(dep.objectRange && !dep.functionRange) {
26+
// define("name", {...})
27+
// => var XXX; !(XXX = {...})
2628
source.insert(0, "var " + localModuleVar + ";");
2729
source.replace(dep.range[0], dep.objectRange[0]-1,
2830
"!(" + localModuleVar + " = ");
2931
source.replace(dep.objectRange[1], dep.range[1]-1, ")");
3032
} else if(!dep.arrayRange && dep.functionRange && !dep.objectRange) {
33+
// define("name", function() {...})
34+
// => var XXX; !(XXX = (function() {...}.call(exports, __webpack_require__, exports, module)))
3135
source.insert(0, "var " + localModuleVar + ";");
3236
source.replace(dep.range[0], dep.functionRange[0]-1,
3337
"!(" + localModuleVar + " = (");
3438
source.replace(dep.functionRange[1], dep.range[1]-1, ".call(exports, __webpack_require__, exports, module)))");
3539
} else if(dep.arrayRange && dep.functionRange && !dep.objectRange) {
40+
// define("name", [], function() {...})
41+
// => var __WEBPACK_AMD_DEFINE_ARRAY__, XXX; !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], XXX = (function() {...}.apply(null, __WEBPACK_AMD_DEFINE_ARRAY__)))
3642
source.insert(0, "var __WEBPACK_AMD_DEFINE_ARRAY__, " + localModuleVar + ";");
3743
source.replace(dep.range[0], dep.arrayRange[0]-1,
38-
"!(" + localModuleVar + " = ");
39-
source.replace(dep.arrayRange[1], dep.functionRange[0]-1, ", __WEBPACK_AMD_DEFINE_RESULT__ = (");
44+
"!(__WEBPACK_AMD_DEFINE_ARRAY__ = ");
45+
source.replace(dep.arrayRange[1], dep.functionRange[0]-1, ", " + localModuleVar + " = (");
4046
source.replace(dep.functionRange[1], dep.range[1]-1, ".apply(null, __WEBPACK_AMD_DEFINE_ARRAY__)))");
4147
} else if(dep.functionRange && dep.objectRange) {
48+
// define("name", abc)
49+
// => var __WEBPACK_AMD_DEFINE_FACTORY__, XXX; !(__WEBPACK_AMD_DEFINE_FACTORY__ = (abc), XXX = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) : __WEBPACK_AMD_DEFINE_FACTORY__))
4250
source.insert(0, "var __WEBPACK_AMD_DEFINE_FACTORY__, " + localModuleVar + ";");
4351
source.replace(dep.range[0], dep.functionRange[0]-1,
4452
"!(__WEBPACK_AMD_DEFINE_FACTORY__ = (");
45-
source.replace(dep.functionRange[1], dep.range[1]-1, "), (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (" + localModuleVar + " = __WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) : " + localModuleVar + " = __WEBPACK_AMD_DEFINE_FACTORY__))");
53+
source.replace(dep.functionRange[1], dep.range[1]-1, "), " + localModuleVar + " = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) : __WEBPACK_AMD_DEFINE_FACTORY__))");
4654
}
4755
} else {
4856
if(dep.objectRange && !dep.functionRange) {
57+
// define(["name", ]{...})
58+
// => !(module.exports = {...})
4959
source.replace(dep.range[0], dep.objectRange[0]-1,
5060
"!(module.exports = ");
5161
source.replace(dep.objectRange[1], dep.range[1]-1, ")");
5262
} else if(!dep.arrayRange && dep.functionRange && !dep.objectRange) {
63+
// define(["name", ]function() {...})
64+
// => var __WEBPACK_AMD_DEFINE_RESULT__; !(__WEBPACK_AMD_DEFINE_RESULT__ = (function() {...}.call(exports, __webpack_require__, exports, module)), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__))
5365
source.insert(0, "var __WEBPACK_AMD_DEFINE_RESULT__;");
5466
source.replace(dep.range[0], dep.functionRange[0]-1,
5567
"!(__WEBPACK_AMD_DEFINE_RESULT__ = (");
5668
source.replace(dep.functionRange[1], dep.range[1]-1, ".call(exports, __webpack_require__, exports, module)), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__))");
5769
} else if(dep.arrayRange && dep.functionRange && !dep.objectRange) {
70+
// define(["name", ][], function() {...})
71+
// => var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__; !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function() {...}.apply(null, __WEBPACK_AMD_DEFINE_ARRAY__)), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__))
5872
source.insert(0, "var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;");
5973
source.replace(dep.range[0], dep.arrayRange[0]-1,
6074
"!(__WEBPACK_AMD_DEFINE_ARRAY__ = ");
6175
source.replace(dep.arrayRange[1], dep.functionRange[0]-1, ", __WEBPACK_AMD_DEFINE_RESULT__ = (");
6276
source.replace(dep.functionRange[1], dep.range[1]-1, ".apply(null, __WEBPACK_AMD_DEFINE_ARRAY__)), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__))");
6377
} else if(dep.functionRange && dep.objectRange) {
78+
// define(["name", ]abc)
79+
// => var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__; !(__WEBPACK_AMD_DEFINE_FACTORY__ = (abc), (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_RESULT__ = __WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : module.exports = __WEBPACK_AMD_DEFINE_FACTORY__))
6480
source.insert(0, "var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;");
6581
source.replace(dep.range[0], dep.functionRange[0]-1,
6682
"!(__WEBPACK_AMD_DEFINE_FACTORY__ = (");
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
module.exports = "dep";

test/cases/parsing/local-modules/index.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,3 +24,20 @@ it("should not create a chunk for a AMD require to a local module", function() {
2424
});
2525
sync.should.be.eql(true);
2626
});
27+
28+
it("should define and require a local module with deps", function() {
29+
module.exports = "not set";
30+
define("my-module3", ["./dep"], function(dep) {
31+
dep.should.be.eql("dep");
32+
return 1234;
33+
});
34+
module.exports.should.be.eql("not set");
35+
define("my-module4", ["my-module3", "./dep"], function(myModule, dep) {
36+
dep.should.be.eql("dep");
37+
myModule.should.be.eql(1234);
38+
return 2345;
39+
});
40+
module.exports.should.be.eql("not set");
41+
require("my-module3").should.be.eql(1234);
42+
require("my-module4").should.be.eql(2345);
43+
});

0 commit comments

Comments
 (0)