Skip to content

Commit 53e470d

Browse files
committed
Simplify extension ordering for preferences
1 parent 611d013 commit 53e470d

File tree

6 files changed

+31
-22
lines changed

6 files changed

+31
-22
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ _Environment variable denoted in parentheses._
136136
* `--skip-project` Skip project config resolution and loading (`TS_NODE_SKIP_PROJECT`, default: `false`)
137137
* `--skip-ignore` Skip ignore checks (`TS_NODE_SKIP_IGNORE`, default: `false`)
138138
* `--log-error` Logs errors of types instead of exit the process (`TS_NODE_LOG_ERROR`, default: `false`)
139-
* `--prefer-ts-exts` Changes the order of file extensions used when matching file imports so that `.ts` files are preferred over `.js` (`TS_PREFER_TS_EXTS`, default: `false`)
139+
* `--prefer-ts-exts` Re-order file extensions so that TypeScript imports are preferred (`TS_NODE_PREFER_TS_EXTS`, default: `false`)
140140

141141
### Programmatic Only Options
142142

src/bin.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,13 @@ const cwd = process.cwd()
109109
const code = args['--eval']
110110
const isPrinted = args['--print'] !== undefined
111111

112+
/**
113+
* Eval helpers.
114+
*/
115+
const EVAL_FILENAME = `[eval].ts`
116+
const EVAL_PATH = join(cwd, EVAL_FILENAME)
117+
const EVAL_INSTANCE = { input: '', output: '', version: 0, lines: 0 }
118+
112119
// Register the TypeScript compiler instance.
113120
const service = register({
114121
files,
@@ -139,13 +146,6 @@ if (version >= 2) {
139146
// Require specified modules before start-up.
140147
if (args['--require']) (Module as any)._preloadModules(args['--require'])
141148

142-
/**
143-
* Eval helpers.
144-
*/
145-
const EVAL_FILENAME = `[eval].ts`
146-
const EVAL_PATH = join(cwd, EVAL_FILENAME)
147-
const EVAL_INSTANCE = { input: '', output: '', version: 0, lines: 0 }
148-
149149
// Prepend `ts-node` arguments to CLI for child processes.
150150
process.execArgv.unshift(__filename, ...process.argv.slice(2, process.argv.length - args._.length))
151151
process.argv = [process.argv[1]].concat(args._.length ? resolve(cwd, args._[0]) : []).concat(args._.slice(1))

src/index.spec.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -326,6 +326,12 @@ describe('ts-node', function () {
326326
expect(m.example()).to.equal('hello')
327327
})
328328

329+
it('should work with `require.cache`', function () {
330+
const { example1, example2 } = require('../tests/require-cache')
331+
332+
expect(example1).to.not.equal(example2)
333+
})
334+
329335
it('should use source maps', function (done) {
330336
try {
331337
require('../tests/throw')

src/index.ts

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -420,7 +420,7 @@ function shouldIgnore (filename: string, ignore: RegExp[]) {
420420
*
421421
* @param {string} ext
422422
*/
423-
function refreshRequireExtension (ext: string) {
423+
function reorderRequireExtension (ext: string) {
424424
const old = require.extensions[ext] // tslint:disable-line
425425
delete require.extensions[ext] // tslint:disable-line
426426
require.extensions[ext] = old // tslint:disable-line
@@ -436,21 +436,17 @@ function registerExtensions (
436436
register: Register,
437437
originalJsHandler: (m: NodeModule, filename: string) => any
438438
) {
439-
if (opts.preferTsExts) {
440-
extensions.unshift(
441-
'.ts',
442-
'.tsx',
443-
...Object.keys(require.extensions), // tslint:disable-line
444-
)
439+
// Register new extensions.
440+
for (const ext of extensions) {
441+
registerExtension(ext, ignore, register, originalJsHandler)
445442
}
446443

447-
// @todo a better way with options
448-
Array.from(new Set(extensions))
449-
.forEach(ext => {
450-
registerExtension(ext, ignore, register, originalJsHandler)
444+
if (opts.preferTsExts) {
445+
// tslint:disable-next-line
446+
const preferredExtensions = new Set([...extensions, ...Object.keys(require.extensions)])
451447

452-
if (ext in require.extensions) refreshRequireExtension(ext) // tslint:disable-line
453-
})
448+
for (const ext of preferredExtensions) reorderRequireExtension(ext)
449+
}
454450
}
455451

456452
/**

tests/require-cache.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
const moduleName = require.resolve('./module')
2+
3+
const { example: example1 } = require(moduleName)
4+
delete require.cache[moduleName]
5+
const { example: example2 } = require(moduleName)
6+
7+
export { example1, example2 }

tsconfig.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"compilerOptions": {
3-
"target": "es5",
3+
"target": "es2015",
44
"lib": ["es2015"],
55
"rootDir": "src",
66
"outDir": "dist",

0 commit comments

Comments
 (0)