web-dev-qa-db-ja.com

mochaでts-nodeの `tsconfig.json`をオーバーライドする

Mochaから呼び出されたときにtsconfig.json ts-nodeが使用するものをオーバーライドできますか?

メインの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
35
Ralph

TS_NODE_COMPILER_OPTIONS環境変数を使用して構成を設定する必要があります

UNIXマシンのコード例:

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

リポジトリドキュメントから抽出された説明


CLIおよびプログラムオプション

括弧で示された環境変数

  • -T, --transpile-only TypeScriptの高速なtranspileModuleを使用(TS_NODE_TRANSPILE_ONLY、デフォルト:false)
  • -I, --ignore [pattern]パスパターンをオーバーライドしてコンパイルをスキップします(TS_NODE_IGNORE、デフォルト:/ node_modules /)
  • -P, --project [path] TypeScript JSONプロジェクトファイルへのパス(TS_NODE_PROJECT
  • -C, --compiler [name]カスタムTypeScriptコンパイラを指定します(TS_NODE_COMPILER、デフォルト:TypeScript)
  • -D, --ignore-diagnostics [code]診断コードによるTypeScript警告を無視(TS_NODE_IGNORE_DIAGNOSTICS
  • -O, --compiler-options [opts]コンパイラオプションとマージするJSONオブジェクト(TS_NODE_COMPILER_OPTIONS
  • --files起動時にtsconfig.jsonからファイルをロードします(TS_NODE_FILES、デフォルト:false)
  • --prettyきれいな診断フォーマッターを使用(TS_NODE_PRETTY、デフォルト:false)
  • --skip-projectプロジェクト構成の解決と読み込みをスキップします(TS_NODE_SKIP_PROJECT、デフォルト:false)
  • --skip-ignore無視チェックをスキップ(TS_NODE_SKIP_IGNORE、デフォルト:false)
  • --log-errorプロセスを終了する代わりに、タイプのエラーを記録します(TS_NODE_LOG_ERROR、デフォルト:false)
  • --prefer-ts-exts TypeScriptインポートが優先されるようにファイル拡張子を並べ替えます(TS_NODE_PREFER_TS_EXTS、デフォルト:false)
37
lleon

--compilerOptionsは機能しません。

必要なことは、ts-nodeの登録方法をカスタマイズすることです。私のケースはあなたのケースとは少し異なりました。テストコードに必要な設定を含むtest/tsconfig.jsonを使用したかったのです。 --require ts-node/registerを使用した場合、テストの実行に必要な設定が含まれていないデフォルトの構成を使用していました。

私がしたことは:

  1. ファイル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",
  },
});
16
Louis

Package.json-スクリプトセクション:

"test": "TS_NODE_PROJECT=src mocha"

プロジェクトのsrcディレクトリでtsconfig.jsonを選択し、デフォルトのtsconfig.jsonを上書きします。

OPはsrcの代わりにtestを使用して同じことを達成できます

7
Samir Seth

これはWindowsでうまくいきました

set TS_NODE_COMPILER_OPTIONS={\"module\":\"commonjs\"} && mocha -r ts-node/register test/unit/*.test.ts 

これは、そのソリューションを使用するように促したエラーでした

(function (exports, require, module, __filename, __dirname) { import 'mocha';

2
Wakeel

TypeScriptを使用すると、構成ファイルをオーバーライドできます。他のソリューションで説明されているように環境変数にJSONをハードコーディングするのではなく、環境内のオーバーライドされた構成パスを指定します。これには、TS_NODE_PROJECT環境変数を使用できます。

TS_NODE_PROJECT='./tsconfig.commonjs.json'

したがって、メイン設定が次の場合:

tsconfig.json

{
  "compilerOptions": {
    "target": "esnext",
    "module": "esnext",
   }
}

module設定をオーバーライドする別の構成を作成できます。

tsconfig.commonjs.json

{
  "extends": "./tsconfig.json",
  "compilerOptions": {
    "module": "commonjs"
  }
}

Mochaを実行するときに、使用するオーバーライド構成を指定します。

    "test": "TS_NODE_PROJECT='./tsconfig.commonjs.json' mocha -r ts-node/register test/**/*.spec.ts*"

これにより、モカテストのためだけにtsconfigをさらに簡単にカスタマイズできます。そのパスを直接指定してts-node(mochaの外部)を実行することもできます。

ts-node -P tsconfig.commonjs.json -r myFile.ts 
2
Steven Spungin

Macで

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