repl node node.js mocha tsconfig

node.js - repl - node js ts node



Anulando `tsconfig.json` para ts-node en mocha (3)

¿Es posible anular qué tsconfig.json ts-node usa cuando se llama desde mocha?

Mi tsconfig.json principal contiene "module": "es2015" , pero quiero usar "module": "commonjs" para ts-node.

Probé esto

mocha --compilers ts:ts-node/register,tsx:ts-node/register / --compilerOptions ''{"module":"commonjs"}'' / --require ts-node/register test/**/*.spec.ts*

Pero no funcionó:

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


En package.json - sección de scripts:

"test": "TS_NODE_PROJECT=src mocha"

recoge mi tsconfig.json en el directorio src de mi proyecto, anulando el tsconfig.json predeterminado.

OP puede lograr lo mismo usando test en lugar de src


--compilerOptions no funcionará.

Lo que debe hacer es personalizar la forma en que registra ts-node . Mi caso era un poco diferente del tuyo, quería que usara test/tsconfig.json , que contenía la configuración que necesitaba mi código de prueba. Si acabo de usar --require ts-node/register , estaba usando una configuración predeterminada que no contenía la configuración necesaria para ejecutar mis pruebas.

Lo que hice fue:

  1. Crear un archivo de test/tshook.js . Contiene:

    require("ts-node").register({ project: "test/tsconfig.json", });

  2. Edité mi test/mocha.opts para tener:

    --require test/tshook.js test/**/*.ts

Esto debería pasar la configuración deseada a ts-node :

require("ts-node").register({ compilerOptions: { module: "commonjs", }, });


TS_NODE_COMPILER_OPTIONS establecer la configuración a través de la variable de entorno TS_NODE_COMPILER_OPTIONS

Código de ejemplo en una máquina unix:

TS_NODE_COMPILER_OPTIONS=''{"module":"commonjs"}'' / mocha --require ts-node/register ''test/**/*.spec.{ts,tsx}''

Explicación extraída de la documentación del repositorio.

CLI y opciones programáticas

Variable de entorno denotada entre paréntesis.

  • --typeCheck Habilita la verificación de tipo para TypeScript ( TS_NODE_TYPE_CHECK )
  • --cacheDirectory Configure el directorio de caché del archivo de salida ( TS_NODE_CACHE_DIRECTORY )
  • -I, --ignore [pattern] Anula los patrones de ruta para omitir la compilación ( TS_NODE_IGNORE )
  • -P, --project [path] Ruta al archivo de proyecto JSON de TypeScript ( TS_NODE_PROJECT )
  • -C, --compiler [name] Especifique un compilador de TypeScript personalizado ( TS_NODE_COMPILER )
  • -D, --ignoreDiagnostics [code] Ignore las advertencias de TypeScript por código de diagnóstico ( TS_NODE_IGNORE_DIAGNOSTICS )
  • -O, --compilerOptions [opts] objeto JSON para fusionar con las opciones del compilador ( TS_NODE_COMPILER_OPTIONS )
  • --no-cache Deshabilita la --no-cache local del nodo de TypeScript ( TS_NODE_CACHE )
  • --skip-project Omitir resolución de configuración y carga del proyecto ( TS_NODE_SKIP_PROJECT )
  • --skip-ignore Omitir ignorar cheques ( TS_NODE_SKIP_IGNORE )