Skip to content

Commit a1975c4

Browse files
committed
feat: support nodejs globals: global, process, Buffer
1 parent 36cb1d4 commit a1975c4

4 files changed

Lines changed: 40 additions & 9 deletions

File tree

spec/parser.uses-common-js.spec.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,3 +110,8 @@ module.exports = require('./_library') || !require('./_fails')(function () {
110110
t.deepEqual(usesCommonJs(code), {require: true, moduleExports: true});
111111
t.end();
112112
});
113+
114+
test('usesCommonJs picks nodejs global, process, and Buffer', t => {
115+
t.deepEqual(usesCommonJs("if (global) { Buffer.from(process.cwd()); }"), {'global': true, 'Buffer': true, 'process': true});
116+
t.end();
117+
});

spec/transformers/cjs-es.spec.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,3 +74,13 @@ test('cjsEs transform wraps ES module', t => {
7474
t.ok(result.contents.startsWith('define(["exports"'));
7575
t.end();
7676
});
77+
78+
test('cjsEs transform wraps cjs code with global, process, and Buffer', t => {
79+
const source = 'exports.name = global.bar;exports.loo = new Buffer(process.cwd());';
80+
const expected = 'define(function (require, exports, module) {' +
81+
'var global = window;var process = require(\'process\');var Buffer = require(\'buffer\').Buffer;\n' +
82+
'exports.name = global.bar;exports.loo = new Buffer(process.cwd());\n});\n';
83+
84+
t.deepEqual(cjsEs(source), {headLines: 1, contents: expected});
85+
t.end();
86+
});

src/parser.js

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -75,10 +75,14 @@ export function usesCommonJs (code, globals) {
7575
usage.require = true;
7676
}
7777

78-
if (globals['exports']) usage.exports = true;
79-
if (globals['module']) usage.moduleExports = true;
80-
if (globals['__dirname']) usage.dirname = true;
81-
if (globals['__filename']) usage.filename = true;
78+
if (globals['exports']) usage['exports'] = true;
79+
if (globals['module']) usage['moduleExports'] = true;
80+
if (globals['__dirname']) usage['dirname'] = true;
81+
if (globals['__filename']) usage['filename'] = true;
82+
// special nodejs globals
83+
if (globals['global']) usage['global'] = true;
84+
if (globals['process']) usage['process'] = true;
85+
if (globals['Buffer']) usage['Buffer'] = true;
8286

8387
if (Object.keys(usage).length) {
8488
return usage;
@@ -129,21 +133,21 @@ export function usesAmdOrRequireJs (code, globals) {
129133
}
130134
let usage = {};
131135

132-
if (globals['requirejs']) usage.requirejs = true;
136+
if (globals['requirejs']) usage['requirejs'] = true;
133137

134138
if (globals['require']) {
135139
let list = globals['require'];
136140
if (some(list, findAmdRequireIdentifiers(ast))) {
137-
usage.require = true;
141+
usage['require'] = true;
138142
}
139143

140144
if (some(list, findAmdRequireConfigIdentifiers(ast))) {
141-
usage.requireConfig = true;
145+
usage['requireConfig'] = true;
142146
}
143147
}
144148

145149
if (globals['define']) {
146-
usage.define = true;
150+
usage['define'] = true;
147151
// We didn't implement declaresDefine and defineAmd here.
148152
// If we want, use eslint-scope getDeclaredVariables(node) api to get function definition in inner scope.
149153
}

src/transformers/cjs-es.js

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,23 @@ export default function(contents, forceWrap) {
3333

3434
let pre = '';
3535
if (cjsUsage && (cjsUsage.dirname || cjsUsage.filename)) {
36-
pre = 'var __filename = module.filename || \'\', ' +
36+
pre += 'var __filename = module.filename || \'\', ' +
3737
'__dirname = ' +
3838
'__filename.slice(0, __filename.lastIndexOf(\'/\') + 1);';
3939
}
4040

41+
if (cjsUsage && cjsUsage['global']) {
42+
pre += 'var global = window;';
43+
}
44+
45+
if (cjsUsage && cjsUsage['process']) {
46+
pre += "var process = require('process');";
47+
}
48+
49+
if (cjsUsage && cjsUsage['Buffer']) {
50+
pre += "var Buffer = require('buffer').Buffer;";
51+
}
52+
4153
return {
4254
headLines: 1,
4355
contents: 'define(function (require, exports, module) {' + pre + '\n' +

0 commit comments

Comments
 (0)