Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Overriding `tsconfig.json` for ts-node in mocha

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 
like image 745
Ralph Avatar asked Nov 16 '16 15:11

Ralph


People also ask

Does TS-node use Tsconfig json?

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.

What is the use of Tsconfig json file in TypeScript?

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.


1 Answers

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)
like image 81
lleon Avatar answered Sep 27 '22 23:09

lleon