Is it possible to override which tsconfig.json
ts-node uses when called from mocha?
My main tsconfig.json
contains "module": "es2015"
, but I want to use "module": "commonjs"
for ts-node only.
I tried this
mocha --compilers ts:ts-node/register,tsx:ts-node/register \ --compilerOptions '{"module":"commonjs"}' \ --require ts-node/register test/**/*.spec.ts*
but it did not work:
SyntaxError: Unexpected token import at exports.runInThisContext (vm.js:53:16) at Module._compile (module.js:387:25) at Module.m._compile (/usr/lib/node_modules/ts-node/src/index.ts:406:23) at Module._extensions..js (module.js:422:10) at Object.require.extensions.(anonymous function) [as .tsx] (/usr/lib/node_modules/ts-node/src/index.ts:409:12) at Module.load (module.js:357:32) at Function.Module._load (module.js:314:12) at Module.require (module.js:367:17) at require (internal/module.js:16:19) at /usr/lib/node_modules/mocha/lib/mocha.js:222:27 at Array.forEach (native) at Mocha.loadFiles (/usr/lib/node_modules/mocha/lib/mocha.js:219:14) at Mocha.run (/usr/lib/node_modules/mocha/lib/mocha.js:487:10) at Object.<anonymous> (/usr/lib/node_modules/mocha/bin/_mocha:458:18) at Module._compile (module.js:413:34) at Object.Module._extensions..js (module.js:422:10) at Module.load (module.js:357:32) at Function.Module._load (module.js:314:12) at Function.Module.runMain (module.js:447:10) at startup (node.js:146:18) at node.js:404:3
ts-node automatically finds and loads tsconfig. json . Most ts-node options can be specified in a "ts-node" object using their programmatic, camelCase names. We recommend this because it works even when you cannot pass CLI flags, such as node --require ts-node/register and when using shebangs.
The presence of a tsconfig. json file in a directory indicates that the directory is the root of a TypeScript project. The tsconfig. json file specifies the root files and the compiler options required to compile the project.
You need to set the configuration through the TS_NODE_COMPILER_OPTIONS
environment variable
Example code on an unix machine:
TS_NODE_COMPILER_OPTIONS='{"module":"commonjs"}' \ mocha --require ts-node/register 'test/**/*.spec.{ts,tsx}'
Explanation extracted from the repository documentation
CLI and Programmatic Options
Environment variable denoted in parentheses.
-T, --transpile-only
Use TypeScript's faster transpileModule (TS_NODE_TRANSPILE_ONLY
, default: false)-I, --ignore [pattern]
Override the path patterns to skip compilation (TS_NODE_IGNORE
, default: /node_modules/)-P, --project [path]
Path to TypeScript JSON project file (TS_NODE_PROJECT
)-C, --compiler [name]
Specify a custom TypeScript compiler (TS_NODE_COMPILER
, default: typescript)-D, --ignore-diagnostics [code]
Ignore TypeScript warnings by diagnostic code (TS_NODE_IGNORE_DIAGNOSTICS
)-O, --compiler-options [opts]
JSON object to merge with compiler options (TS_NODE_COMPILER_OPTIONS
)--files
Load files from tsconfig.json on startup (TS_NODE_FILES
, default: false)--pretty
Use pretty diagnostic formatter (TS_NODE_PRETTY
, default: false)--skip-project
Skip project config resolution and loading (TS_NODE_SKIP_PROJECT
, default: false)--skip-ignore
Skip ignore checks (TS_NODE_SKIP_IGNORE
, default: false)--log-error
Logs errors of types instead of exit the process (TS_NODE_LOG_ERROR
, default: false)--prefer-ts-exts
Re-order file extensions so that TypeScript imports are preferred (TS_NODE_PREFER_TS_EXTS
, default: false)If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With