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
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)--compilerOptions
は機能しません。
必要なことは、ts-node
の登録方法をカスタマイズすることです。私のケースはあなたのケースとは少し異なりました。テストコードに必要な設定を含むtest/tsconfig.json
を使用したかったのです。 --require ts-node/register
を使用した場合、テストの実行に必要な設定が含まれていないデフォルトの構成を使用していました。
私がしたことは:
ファイルtest/tshook.js
を作成します。を含む:
require("ts-node").register({
project: "test/tsconfig.json",
});
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はsrcの代わりにtestを使用して同じことを達成できます
これは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';
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
Macで
"test": "TS_NODE_COMPILER_OPTIONS='{\"module\":\"commonjs\"}' mocha --require ts-node/register test/**/*.ts",