Skip to content

Commit 84bb5c2

Browse files
committed
For parse.usesCommonJs(), check for __filename and __dirname usage.
1 parent ad1be75 commit 84bb5c2

File tree

2 files changed

+20
-4
lines changed

2 files changed

+20
-4
lines changed

build/jslib/parse.js

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -471,8 +471,9 @@ define(['./uglifyjs/index'], function (uglify) {
471471

472472

473473
/**
474-
* Determines if require(''), exports.x =, and/or module.exports =
475-
* are used.
474+
* Determines if require(''), exports.x =, module.exports =,
475+
* __dirname, __filename are used. So, not strictly traditional CommonJS,
476+
* also checks for Node variants.
476477
*/
477478
parse.usesCommonJs = function (fileName, fileContents, options) {
478479
var uses = null,
@@ -490,13 +491,15 @@ define(['./uglifyjs/index'], function (uglify) {
490491
}
491492
}, options, function (node, onMatch) {
492493

493-
var call, configNode, args;
494+
var call, args;
494495

495496
if (!isArray(node)) {
496497
return false;
497498
}
498499

499-
if (node[0] === 'var' && node[1] && node[1][0] && node[1][0][0] === 'exports') {
500+
if (node[0] === 'name' && (node[1] === '__dirname' || node[1] === '__filename')) {
501+
return onMatch(node[1].substring(2));
502+
} else if (node[0] === 'var' && node[1] && node[1][0] && node[1][0][0] === 'exports') {
500503
//Hmm, a variable assignment for exports, so does not use cjs exports.
501504
return onMatch('varExports');
502505
} else if (node[0] === 'assign' && node[2][0] === 'dot') {

build/tests/parse.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,8 @@ define(['parse', 'env!env/file'], function (parse, file) {
157157
good2 = "something(); exports.foo = another();",
158158
good3 = "(function () { module.exports = function () {}; }());",
159159
good4 = "var a = require('a'); something(); exports.b = a;",
160+
good5 = "exports.foo = function () { return something(__dirname); };",
161+
good6 = "var foo = 'bar', path = __filename;",
160162

161163
bad1 = "(function(){ if (typeof define === 'function' && define.amd) { define(['some'], function (some) {}) } }());",
162164
bad2 = "require(['something']);",
@@ -173,6 +175,17 @@ define(['parse', 'env!env/file'], function (parse, file) {
173175
t.is(true, result.exports);
174176
t.is(false, !!result.moduleExports);
175177

178+
result = parse.usesCommonJs("good5", good5);
179+
t.is(false, !!result.require);
180+
t.is(true, result.exports);
181+
t.is(true, result.dirname);
182+
183+
result = parse.usesCommonJs("good6", good6);
184+
t.is(true, result.filename);
185+
t.is(false, !!result.exports);
186+
t.is(false, !!result.moduleExports);
187+
188+
176189
t.is(null, parse.usesCommonJs("bad1", bad1));
177190
t.is(null, parse.usesCommonJs("bad2", bad2));
178191
t.is(null, parse.usesCommonJs("bad3", bad3));

0 commit comments

Comments
 (0)