Skip to content

Commit c8f3ce3

Browse files
committedAug 6, 2021
[Fix] bin/tape: delay requires until needed
This ensures that `--require`s happen before everything tape needs, as much as possible
1 parent 1f1a4a7 commit c8f3ce3

File tree

1 file changed

+14
-9
lines changed

1 file changed

+14
-9
lines changed
 

‎bin/tape

+14-9
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,7 @@
22

33
'use strict';
44

5-
var resolveModule = require('resolve').sync;
6-
var resolvePath = require('path').resolve;
7-
var readFileSync = require('fs').readFileSync;
85
var parseOpts = require('minimist');
9-
var glob = require('glob');
10-
var ignore = require('dotignore');
11-
var hasImport = require('has-dynamic-import');
12-
13-
var tape = require('../');
146

157
var opts = parseOpts(process.argv.slice(2), {
168
alias: { r: 'require', i: 'ignore' },
@@ -24,24 +16,33 @@ if (typeof opts.require === 'string') {
2416
opts.require = [opts.require];
2517
}
2618

19+
var resolveModule;
2720
opts.require.forEach(function (module) {
2821
var options = { basedir: cwd, extensions: Object.keys(require.extensions) };
2922
if (module) {
23+
if (!resolveModule) { resolveModule = require('resolve').sync; }
3024
// This check ensures we ignore `-r ""`, trailing `-r`, or other silly things the user might (inadvertently) be doing.
3125
require(resolveModule(module, options));
3226
}
3327
});
3428

29+
var resolvePath = require('path').resolve;
30+
31+
var matcher;
3532
if (typeof opts.ignore === 'string') {
33+
var readFileSync = require('fs').readFileSync;
3634
try {
3735
var ignoreStr = readFileSync(resolvePath(cwd, opts.ignore || '.gitignore'), 'utf-8');
3836
} catch (e) {
3937
console.error(e.message);
4038
process.exit(2);
4139
}
42-
var matcher = ignore.createMatcher(ignoreStr);
40+
var ignore = require('dotignore');
41+
matcher = ignore.createMatcher(ignoreStr);
4342
}
4443

44+
var glob = require('glob');
45+
4546
var files = opts._.reduce(function (result, arg) {
4647
// If glob does not match, `files` will be an empty array.
4748
// Note: `glob.sync` may throw an error and crash the node process.
@@ -58,12 +59,16 @@ var files = opts._.reduce(function (result, arg) {
5859
return resolvePath(cwd, file);
5960
});
6061

62+
var hasImport = require('has-dynamic-import');
63+
6164
hasImport().then(function (hasSupport) {
6265
// the nextTick callback gets called outside the promise chain, avoiding
6366
// promises and unhandled rejections when only loading commonjs files
6467
process.nextTick(importFiles, hasSupport);
6568
});
6669

70+
var tape = require('../');
71+
6772
function importFiles(hasSupport) {
6873
if (!hasSupport) {
6974
return files.forEach(function (x) { require(x); });

0 commit comments

Comments
 (0)
Please sign in to comment.