Skip to content

Commit 656d8a1

Browse files
Support for circular dependencies via exports parameter in define added.
1 parent 1aac483 commit 656d8a1

File tree

3 files changed

+16
-5
lines changed

3 files changed

+16
-5
lines changed

src/modules/clean.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,8 @@ define([
244244
// Creates variable declarations for each AMD module/callback parameter that needs to be hoisted
245245
_.each(hoistedVariables, function(moduleValue, moduleName) {
246246
if (!_.contains(options.ignoreModules, moduleName)) {
247+
var _initValue = amdclean.exportsModules[moduleName] !== true ? null : { type: 'ObjectExpression', properties: [] };
248+
247249
declarations.push({
248250
'type': 'VariableDeclarator',
249251
'id': {
@@ -252,7 +254,7 @@ define([
252254
'range': defaultRange,
253255
'loc': defaultLOC
254256
},
255-
'init': null,
257+
'init': _initValue,
256258
'range': defaultRange,
257259
'loc': defaultLOC
258260
});
@@ -342,4 +344,4 @@ define([
342344

343345
return generatedCode;
344346
};
345-
});
347+
});

src/modules/convertDefinesAndRequires.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ define([
4141
dependencyBlacklist = defaultValues.dependencyBlacklist,
4242
shouldOptimize;
4343

44+
4445
startLineNumber = isDefine || isRequire ? node.expression.loc.start.line : node && node.loc && node.loc.start ? node.loc.start.line : null;
4546
shouldBeIgnored = (amdclean.matchingCommentLineNumbers[startLineNumber] || amdclean.matchingCommentLineNumbers[startLineNumber - 1]);
4647

@@ -120,7 +121,10 @@ define([
120121
if (dependencyBlacklist[currentDependency.value] && !shouldOptimize) {
121122
depNames.push(currentDependency.value);
122123
} else if (dependencyBlacklist[currentDependency.value] !== 'remove') {
123-
if (dependencyBlacklist[currentDependency.value]) {
124+
if (currentDependency.value === "exports") {
125+
depNames.push(moduleName);
126+
amdclean.exportsModules[moduleName] = true;
127+
} else if (dependencyBlacklist[currentDependency.value]) {
124128
depNames.push('{}');
125129
} else {
126130
depNames.push(currentDependency.value);
@@ -294,4 +298,4 @@ define([
294298
return node;
295299
}
296300
};
297-
});
301+
});

src/modules/index.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,11 @@ require([
149149
// All of the stored program comments
150150
this.comments = [];
151151

152+
// exportsModules
153+
// --------
154+
// An object that stores a map of all modules that makes use of the exports parameter in define. Useful when declaring variables and making sure circular dependencies work correctly.
155+
this.exportsModules = {};
156+
152157
// options
153158
// -------
154159
// Merged user options and default options
@@ -183,4 +188,4 @@ require([
183188

184189
return publicAPI;
185190
}));
186-
});
191+
});

0 commit comments

Comments
 (0)