在mocha中为ts-node覆盖`tsconfig.json`

有没有可能覆盖哪些tsconfig.json ts节点使用时从摩卡调用?

我的主要tsconfig.json包含"module": "es2015" ,但我想只使用"module": "commonjs" ts节点只。

我试过这个

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

但它没有工作:

 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_COMPILER_OPTIONS环境variables来设置configuration

unix机器上的代码示例:

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

从存储库文档中提取解释


configuration选项

您可以通过在脚本之前传递选项来设置选项。

ts-node --compiler ntypescript --project src --ignoreWarnings 2304 hello-world.ts

  • –project,-Pparsingtsconfig.jsonpath(或false以禁用)(也是process.env.TS_NODE_PROJECT
  • -C编译器,-C使用一个自定义的,需要的TypeScript编译器兼容typescript@>=1.5.0-alpha (也是process.env.TS_NODE_COMPILER
  • –ignore为ts-node指定一个正则expression式string数组,以跳过编译为TypeScript(默认为/node_modules/false以禁用)(也是process.env.TS_NODE_IGNORE
  • –ignoreWarnings,-I设置要忽略的TypeScript诊断代码数组(也是process.env.TS_NODE_IGNORE_WARNINGS
  • –disableWarnings,-D忽略所有的TypeScript错误(也是process.env.TS_NODE_DISABLE_WARNINGS
  • –compilerOptions,-O使用JSON设置编译器选项(例如--compilerOptions '{"target":"es6"}' )(也是process.env.TS_NODE_COMPILER_OPTIONS
  • –fast,-F使用TypeScript的transpileModule模式(没有types检查,但编译速度更快)(也是process.env.TS_NODE_FAST )–no-cache跳过编译的JavaScriptcaching(也是process.env.TS_NODE_CACHE )–cache-目录configurationTypeScriptcaching目录(也是process.env.TS_NODE_CACHE_DIRECTORY

--compilerOptions不会'工作。

你需要做的是定制你如何注册ts-node 。 我的情况与你的情况有一点不同,我希望它使用test/tsconfig.json ,它包含我的testing代码所需的设置。 如果我刚刚使用了--require ts-node/register ,它使用的是默认configuration,它不包含运行我的testing所需的设置。

我做的是:

  1. 创build一个文件test/tshook.js 。 它包含:

     require("ts-node").register({ project: "test/tsconfig.json", }); 
  2. 我编辑我的test/mocha.opts有:

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

这应该会将所需的设置传递给ts-node

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

在package.json – 脚本部分:

 "test": "TS_NODE_PROJECT=src mocha" 

在我的项目的src目录中选取我的tsconfig.json,覆盖默认的tsconfig.json。

OP可以通过使用test而不是src来实现