
Source MapおよびNative ESMサポートを使用して、node.jsの型の実行とREPL。
最新のドキュメントは、当社のWebサイトhttps://typestrong.org/ts-nodeにもあります。
nodeフラグTSErrorSyntaxErrorERR_REQUIRE_ESMERR_UNKNOWN_FILE_EXTENSIONnode_modulesをスキップしますTS-Nodeは、node.jsのタイプスクリプト実行エンジンとREPLです。
TypeScriptをJavaScriptに変換し、プレシャルなしでnode.jsでTypeScriptを直接実行できるようにします。これは、APIをロードするノードのモジュールをフックすることで実現され、他のnode.jsツールとライブラリと一緒にシームレスに使用できるようにします。
tsconfig.json解析
# Locally in your project.
npm install -D typescript
npm install -D ts-node
# Or globally with TypeScript.
npm install -g typescript
npm install -g ts-node
# Depending on configuration, you may also need these
npm install -D tslib @types/nodeヒント:モジュールをローカルにインストールすると、 package.jsonを介してバージョンを制御および共有できます。 TS-Nodeは、独自のインストールと比較してチェックする前に、常にcwdからコンパイラを解決します。
# Execute a script as `node` + `tsc`.
ts-node script.ts
# Starts a TypeScript REPL.
ts-node
# Execute code with TypeScript.
ts-node -e ' console.log("Hello, world!") '
# Execute, and print, code with TypeScript.
ts-node -p -e ' "Hello, world!" '
# Pipe scripts to execute with TypeScript.
echo ' console.log("Hello, world!") ' | ts-node
# Equivalent to ts-node --transpileOnly
ts-node-transpile-only script.ts
# Equivalent to ts-node --cwdMode
ts-node-cwd script.ts
# Equivalent to ts-node --esm
ts-node-esm script.ts最大の移植性を備えたスクリプトを作成するには、 tsconfig.jsonにオプションを指定し、シバンからそれらを省略します。
#!/usr/bin/env ts-node
// ts-node options are read from tsconfig.json
console . log ( "Hello, world!" ) Shebang内にオプションを含めるには、 env -Sフラグが必要です。これは、 envの最近のバージョンで利用できます。 (互換性)
#!/usr/bin/env -S ts-node --files
// This shebang works on Mac and Linux with newer versions of env
// Technically, Mac allows omitting `-S`, but Linux requires it -Sとの互換性についてenvのバージョンをテストするには:
# Note that these unusual quotes are necessary
/usr/bin/env --debug ' -S echo foo bar ' cli: node -r ts-node/registerおよびnode --loader ts-node/esmを使用せずにTSノードを登録できます
多くの場合、 NODE_OPTIONS設定すると、他のノードツール、子プロセス、およびワーカースレッド内のts-node有効になります。これは、他のノードフラグと組み合わせることができます。
NODE_OPTIONS= " -r ts-node/register --no-warnings " node ./index.tsまたは、ネイティブのESMサポートが必要な場合:
NODE_OPTIONS= " --loader ts-node/esm "これにより、この環境変数を受信して、他のコードを実行する前にts-nodeのフックをインストールするノードプロセスが表示されます。
ノードを直接呼び出している場合は、環境変数を回避し、それらのフラグをノードに渡すことができます。
node --loader ts-node/esm --inspect ./index.tsts-nodeを要求し、 require('ts-node').register({ /* options */ })を使用して、将来の要求に登録できます。
その他の機能については、APIをご覧ください。
TS-Nodeは、 tsconfig.jsonを介して、CLIフラグとして、環境変数として、またはプログラムで指定できるさまざまなオプションをサポートしています。
完全なリストについては、オプションを参照してください。
TSノードCLIフラグは、エントリポイントスクリプトの前に来る必要があります。例えば:
$ ts-node --project tsconfig-dev.json say-hello.ts Ronald
Hello, Ronald ! TS-Nodeは、 tsconfig.json自動的に見つけてロードします。ほとんどのTSノードオプションは、プログラマティックのキャメルケース名を使用して"ts-node"オブジェクトで指定できます。これをお勧めします。これは、 node --require ts-node/registerなどのCLIフラグを渡すことができない場合でも、Shebangsを使用する場合でも機能するためです。
--skipProjectを使用して、 tsconfig.json読み込みをスキップします。 --projectを使用して、 tsconfig.jsonへのパスを明示的に指定します。
検索するときは、 tscと同じ検索動作を使用して解決されます。デフォルトでは、この検索はエントリポイントスクリプトに対して実行されます。 --cwdModeまたはentrypointが指定されていない場合 - たとえば、REPLを使用する場合 - 検索は--cwd / process.cwd()に対して実行されます。
このサンプル構成を出発点として使用できます。
{
// This is an alias to @tsconfig/node16: https://github.com/tsconfig/bases
"extends" : "ts-node/node16/tsconfig.json" ,
// Most ts-node options can be specified here using their programmatic names.
"ts-node" : {
// It is faster to skip typechecking.
// Remove if you want ts-node to do typechecking.
"transpileOnly" : true ,
"files" : true ,
"compilerOptions" : {
// compilerOptions specified here will override those declared below,
// but *only* in ts-node. Useful if you want ts-node and tsc to use
// different options with a single tsconfig.json.
}
} ,
"compilerOptions" : {
// typescript options here
}
}バンドルされたJSONスキーマには、すべての互換性のあるオプションがリストされています。
@tsconfig/basesは、いくつかのノードバージョンに推奨される構成を維持します。便宜上、これらはTSノードにバンドルされています。
{
"extends" : "ts-node/node16/tsconfig.json" ,
// Or install directly with `npm i -D @tsconfig/node16`
"extends" : "@tsconfig/node16/tsconfig.json" ,
}tsconfig.jsonがディスクからロードされていない場合、TS-Nodeは、 nodeとtypescriptバージョンと互換性のある @tsconfig/basesの最新の推奨デフォルトを使用します。最新のnodeとtypescriptを使用すると、これは@tsconfig/node16です。
typescriptの古いバージョンは@tsconfig/node16と互換性がありません。そのような場合、古いデフォルト構成を使用します。
疑わしい場合は、 ts-node --showConfig使用されている構成をログにし、 ts-node -vv nodeとtypescriptバージョンをログにします。
nodeフラグnodeフラグはnodeに直接渡す必要があります。 TS-Nodeバイナリに渡すことも、 tsconfig.jsonで指定することもできません
NODE_OPTIONS環境変数を使用して、オプションをnodeに渡すことをお勧めします。
NODE_OPTIONS= ' --trace-deprecation --abort-on-uncaught-exception ' ts-node ./index.tsまたは、 nodeを直接呼び出して、 --require / -r経由でts -nodeをインストールすることができます
node --trace-deprecation --abort-on-uncaught-exception -r ts-node/register ./index.tsすべてのコマンドラインフラグは、 --camelCaseと--hyphen-case両方をサポートしています。
ほとんどのオプションは、tsconfig.json:tsconfig.json経由の構成で宣言できます
ts-node supports --print ( -p )、 --eval ( -e )、 --require ( -r )、および--interactive ( -i )node.js cli。
ts-node TSC CLIと同様の--projectおよび--showConfigをサポートしています。
環境変数は、利用可能な場合、 ALL_CAPSにあります
ts-node --helpヘルプテキストを印刷します
ts-node -v
ts-node -vvvバージョンを印刷します。 -vvには、ノードとタイプスクリプトコンパイラバージョンが含まれます。 -vvvには、TSノードへの絶対パスとタイプスクリプトインストールが含まれます。
ts-node -e < typescript code >
# Example
ts-node -e ' console.log("Hello world!") 'コードを評価します
ts-node -p -e < typescript code >
# Example
ts-node -p -e ' "Hello world!" ' --evalの印刷結果
ts-node -istdinが端末のように見えても、REPLを開きます
ts-node --esm
ts-node-esmESMローダーを使用したブートストラップにより、完全なESMサポートが可能になります
ts-node -P < path/to/tsconfig >
ts-node --project < path/to/tsconfig >tsconfigファイルへのパス。
大文字-Pに注意してください。これは、 tscの-p/--projectオプションとは異なります。
環境: TS_NODE_PROJECT
ts-node --skipProjectプロジェクトの構成解決と読み込みをスキップします
デフォルト: false
環境: TS_NODE_SKIP_PROJECT
ts-node -c
ts-node --cwdMode
ts-node-cwdエントリポイントスクリプトのディレクトリの代わりに現在のディレクトリに関連する構成を解決します
ts-node -O < json compilerOptions >
ts-node --compilerOptions < json compilerOptions >JSONオブジェクトコンパイラオプションとマージします
環境: TS_NODE_COMPILER_OPTIONS
ts-node --showConfig ts-nodeオプションを含むResolved tsconfig.jsonを印刷し、終了します
ts-node -T
ts-node --transpileOnly TypeScriptのより高速なtranspileModuleを使用します
デフォルト: false
環境: TS_NODE_TRANSPILE_ONLY
ts-node --typeCheck反対側--transpileOnly
デフォルト: true
環境: TS_NODE_TYPE_CHECK
ts-node -H
ts-node --compilerHostTypeScriptのコンパイラホストAPIを使用します
デフォルト: false
環境: TS_NODE_COMPILER_HOST
ts-node --files filesをロードし、起動時にtsconfig.jsonをinclude exclude 。これにより、特定のタイプチェック障害が回避される場合があります。詳細については、欠落しているタイプを参照してください。
デフォルト: false
環境: TS_NODE_FILES
ts-node -D < code,code >
ts-node --ignoreDiagnostics < code,code >診断コードによるタイプスクリプト警告を無視します
環境: TS_NODE_IGNORE_DIAGNOSTICS
ts-node -I < regexp matching ignored files >
ts-node --ignore < regexp matching ignored files >パスパターンをオーバーライドして、コンピレーションをスキップします
デフォルト: /node_modules/
環境: TS_NODE_IGNORE
ts-node --skipIgnoreスキップチェックを無視します
デフォルト: false
環境: TS_NODE_SKIP_IGNORE
ts-node -C < name >
ts-node --compiler < name >カスタムタイプスクリプトコンパイラを指定します
デフォルト: typescript
環境: TS_NODE_COMPILER
ts-node --swc SWCで輸送。暗示--transpileOnly
デフォルト: false
ts-node --transpiler < name >
# Example
ts-node --transpiler ts-node/transpilers/swcサードパーティの非タイペチックトランスピラーを使用します
ts-node --preferTsExtsタイプスクリプトのインポートが推奨されるように、ファイル拡張子を再注文します
デフォルト: false
環境: TS_NODE_PREFER_TS_EXTS
ts-node --logError例外をスローする代わりに、stderrにタイプスクリプトエラーを記録します
デフォルト: false
環境: TS_NODE_LOG_ERROR
ts-node --prettyきれいな診断フォーマッタを使用してください
デフォルト: false
環境: TS_NODE_PRETTY
TS_NODE_DEBUG=true ts-nodeデバッグロギングを有効にします
ts-node -r < module name or path >
ts-node --require < module name or path >実行前にノードモジュールが必要です
ts-node --cwd < path/to/directory >この作業ディレクトリに呼び出されたかのように動作します
デフォルト: process.cwd()
環境: TS_NODE_CWD
ts-node --emit出力ファイルを.ts-nodeディレクトリにエミットします。必要な--compilerHost
デフォルト: false
環境: TS_NODE_EMIT
ts-node --scope scopeDir内のファイルへのスコープコンパイラ。このディレクトリの外側は無視されます。
デフォルト: false
環境: TS_NODE_SCOPE
ts-node --scopeDir < path/to/directory > scopeが有効になっているときにコンパイラが制限されているディレクトリ。
デフォルト:最初: tsconfig.json "rootdir"指定されている場合は、 tsconfig.jsonを含むディレクトリ、またはtsconfig.jsonがロードされていない場合はcwd。
環境: TS_NODE_SCOPE_DIR
package.json "type"フィールドを無視して、特定のファイルのモジュールタイプをオーバーライドします。詳細については、モジュールタイプのOverridesを参照してください。
デフォルト: package.json "type"およびtsconfig.json "module"に従うtsconfig.jsonまたはAPIでのみ指定できます。
TS_NODE_HISTORY= < path/to/history/file > ts-nodeREPLの履歴ファイルへのパス
デフォルト: ~/.ts_node_repl_history
ts-node --noExperimentalReplAwait Replでトップレベルの待機を無効にします。 Nodeの--no-experimental-repl-awaitに相当します
デフォルト: TypeScriptバージョンが3.8以降で、ターゲットがES2018以降の場合は有効です。
環境: TS_NODE_EXPERIMENTAL_REPL_AWAIT falseを無効に設定します
インポートを再マップする実験的なフックを有効にし、サポートするための電話が必要です。
import "./foo.js" foo.tsを実行します。現在、次の拡張機能がマッピングされます。.js to .ts 、 .tsx 、または.jsx.cjs to .cts.mjs to .mts.jsx to .tsx将来的には、このフックもサポートします。
baseUrl 、 pathsrootDirsrootDirマッピングへのoutDir詳細については、#1514を参照してください。
デフォルト: falseですが、将来のバージョンでデフォルトで有効になる可能性がありますtsconfig.jsonまたはAPIでのみ指定できます。
ts-node --experimentalSpecifierResolution node Nodeのように--experimental-specifier-resolution同様ですが、便利なためにtsconfig.jsonに設定することもできます。 esmを有効にする必要があります。
デフォルト: explicit
APIには、ここには表示されていない追加のオプションが含まれています。
SWCサポートは、 --swcフラグまたは"swc": true TSCONFIGオプションを介して組み込まれています。
SWCは、Rustに実装されたTypeScript互換のトランスピラーです。これにより、バニラtranspileOnlyよりも数桁速くなります。
それを使用するには、最初に@swc/coreまたは@swc/wasmをインストールします。 importHelpersを使用する場合は、 @swc/helpersもインストールします。 targetが「ES2015」よりも少なく、 async / awaitまたはジェネレーター機能を使用している場合は、 regenerator-runtimeもインストールします。
npm i -D @swc/core @swc/helpers regenerator-runtime次に、 tsconfig.jsonに以下を追加します。
{
"ts-node" : {
"swc" : true
}
}SWCは、
tslibの代わりに@swc/helpersを使用します。importHelpersを有効にしている場合は、@swc/helpersもインストールする必要があります。
タイプスクリプトは、ほとんどの場合、最新のimport構文を使用して記述されますが、基礎となるランタイムによって実行される前に変換されます。 NodeのネイティブESMサポートを使用して、CommonJSに変換するか、ネイティブimport構文を保存することを選択できます。構成はそれぞれ異なります。
2つの簡単な比較を次に示します。
| commonjs | ネイティブECMAScriptモジュール |
|---|---|
ネイティブimport構文を記述します | ネイティブimport構文を記述します |
import require()に変換します | importを変換しません |
| ノードは、Classic CommonJSローダーを使用してスクリプトを実行します | ノード新しいESMローダーを使用してスクリプトを実行します |
いずれかを使用してください:ts-nodenode -r ts-node/registerNODE_OPTIONS="ts-node/register" noderequire('ts-node').register({/* options */}) | いずれかを使用してください:ts-node --esmts-node-esm"esm": true tsconfig.jsonでtruenode --loader ts-node/esmNODE_OPTIONS="--loader ts-node/esm" node |
CommonJSへの変換は通常、よりシンプルで、より古いためより広くサポートされています。 package.jsonから"type": "module"を削除し、 tsconfig.jsonで"module": "CommonJS"を設定する必要があります。
{
// This can be omitted; commonjs is the default
"type" : "commonjs"
} {
"compilerOptions" : {
"module" : "CommonJS"
}
} tsc 、Webパック、または別のビルドツールの"module": "ESNext"を保持する必要がある場合は、TSノードのオーバーライドを設定できます。
{
"compilerOptions" : {
"module" : "ESNext"
} ,
"ts-node" : {
"compilerOptions" : {
"module" : "CommonJS"
}
}
} ノードのESMローダーフックは実験的であり、変更される場合があります。 TS-NodeのESMサポートは可能な限り安定していますが、APIに依存しているのは、ノードがノードの新しいバージョンで破損する可能性があり、壊れます。したがって、生産には推奨されません。
完全な使用、制限、およびフィードバックを提供するには、#1007を参照してください。
package.jsonおよび"module": "ESNext" tsconfig.json "type": "module"する必要があります。
{
"type" : "module"
} {
"compilerOptions" : {
"module" : "ESNext" // or ES2015, ES2020
} ,
"ts-node" : {
// Tell ts-node CLI to install the --loader automatically, explained below
"esm" : true
}
}また、ノードが渡されることを確認する必要があります--loader 。 TSノードCLIは、 esmオプションを使用してこれを自動的に行います。
注:
--esm、それを渡すために子プロセスを生成する必要があります--loader。これは、ノードが現在のプロセスにローダーフックをインストールする機能を追加すると変更される可能性があります。
# pass the flag
ts-node --esm
# Use the convenience binary
ts-node-esm
# or add `"esm": true` to your tsconfig.json to make it automatic
ts-nodeCLIを使用していない場合は、ローダーフラグをノードに渡します。
node --loader ts-node/esm ./index.ts
# Or via environment variable
NODE_OPTIONS= " --loader ts-node/esm " node ./index.tsTS-Nodeは、賢明なデフォルトの構成を使用して、 tsconfig.json持っている場合は尊敬しながら、ボイラープレートを削減します。どの構成が使用されているかがわからない場合は、 ts-node --showConfigでログインできます。これはtsc --showConfigに似ていますが、 "ts-node"オプションも含まれています。
TS-Nodeは、ローカルにインストールされたtypescriptバージョンも尊重しますが、グローバルインストールはグローバルにインストールされているtypescriptにフォールバックします。どのバージョンが使用されているかわからない場合、 ts-node -vvそれらをログにします。
$ ts-node -vv
ts-node v10.0.0
node v16.1.0
compiler v4.2.2
$ ts-node --showConfig
{
" compilerOptions " : {
" target " : " es6 " ,
" lib " : [
" es6 " ,
" dom "
],
" rootDir " : " ./src " ,
" outDir " : " ./.ts-node " ,
" module " : " commonjs " ,
" moduleResolution " : " node " ,
" strict " : true,
" declaration " : false,
" sourceMap " : true,
" inlineSources " : true,
" types " : [
" node "
],
" stripInternal " : true,
" incremental " : true,
" skipLibCheck " : true,
" importsNotUsedAsValues " : " error " ,
" inlineSourceMap " : false,
" noEmit " : false
},
" ts-node " : {
" cwd " : " /d/project " ,
" projectSearchDir " : " /d/project " ,
" require " : [],
" project " : " /d/project/tsconfig.json "
}
}TSノードのエラー、TypeScriptコンパイラからのエラー、およびnodeからのエラーを区別することが重要です。また、コードのタイプエラー、コードのバグ、または構成の欠陥によってエラーが引き起こされる時期を理解することも重要です。
TSErrorコンパイラからのタイプエラーは、 TSErrorとしてスローされます。これらは、 tscから得られるエラーと同じです。
SyntaxError TSErrorではないエラーはNode.js( SyntaxErrorなど)からのものであり、typescriptまたはTS-Nodeで固定できません。これらは、コードまたは構成のバグです。
nodeのバージョンは、TypeScriptでサポートされているすべてのJavaScript構文をサポートしていない場合があります。コンパイラは、TSCONFIG "target"オプションによって制御される「ダウンレベル」を介してこの構文を変換する必要があります。それ以外の場合、コードは正常にコンパイルされますが、ノードはSyntaxErrorをスローします。
たとえば、 node 12は?.オプションのチェーンオペレーター。 "target": "esnext"を使用する場合は、次のタイプスクリプトの構文を次のものにします。
const bar : string | undefined = foo ?. bar ;このJavaScriptにコンパイルします:
const a = foo ?. bar ;このコードを実行しようとすると、ノード12はSyntaxErrorを投げます。これを修正するには、 "target": "es2019"または低いSO TypeScript変換?. nodeに理解できます。
ERR_REQUIRE_ESMこのエラーは、モジュールがrequire() dである場合にノードでスローされますが、ノードはネイティブESMとして実行する必要があると考えています。これはいくつかの理由で発生する可能性があります:
webpack.config.tsなどの構成ファイルがあります。.ctsに変更しますERR_UNKNOWN_FILE_EXTENSIONこのエラーは、モジュールに認識されていないファイル拡張機能があるか、まったく拡張機能がない場合にノードによってスローされ、ネイティブESMとして実行されます。これはいくつかの理由で発生する可能性があります:
mochaなどの拡張レスバイナリを備えたツールを使用しています。ts-node-esm 、 ts-node --esmを使用するか、 "ts-node": {"esm": true} tsconfig.jsonに追加します。ドキュメントwebpack.config.tsなどの構成ファイルがあります。.ctsに変更しますTS-Nodeは、 filesを熱心にロードしたり、デフォルトでinclude 、またはexclude 。これは、プロジェクトの大部分がプロジェクトディレクトリ内のすべてのファイル( Gulpfile.ts 、ランタイムvsテストなど)を使用していないため、すべてのファイルをタイプのスタートアップ時間を遅らせるためです。代わりに、TS-Nodeはスクリプトファイル( ts-node index.tsなど)で始まり、型はインポートと参照に基づいて依存関係を解決します。
時々、この最適化は、欠落しているタイプにつながります。幸いなことに、タイプチェックにそれらを含める他の方法があります。
グローバル定義については、 typeRootsコンパイラオプションを使用できます。これには、タイプ定義をタイプパッケージとして構成する必要があります(タイプスクリプト定義ファイルが緩んでいません)。これがどのように機能するかの詳細は、TypeScriptハンドブックにあります。
例tsconfig.json :
{
"compilerOptions" : {
"typeRoots" : [ "./node_modules/@types" , "./typings" ]
}
}プロジェクト構造の例:
<project_root>/
-- tsconfig.json
-- typings/
-- <module_name>/
-- index.d.ts
モジュール宣言ファイルの例:
declare module '<module_name>' {
// module definitions go here
}モジュール定義の場合、 pathsを使用できます。
{
"compilerOptions" : {
"baseUrl" : "." ,
"paths" : {
"custom-module-type" : [ "types/custom-module-type" ]
}
}
}別のオプションは、トリプルスラッシュディレクティブです。これは、 compilerOptionsを変更したり、 typeRootsのタイプ定義を構成したりしたくない場合に役立つ場合があります。以下は、プロジェクト内の相対パスとしてのトリプルスラッシュ指令の例です。
/// <reference path="./types/lib_greeter" />
import { Greeter } from "lib_greeter"
const g = new Greeter ( ) ;
g . sayHello ( ) ;上記のいずれも、 filesを使用していない場合、 filesオプションを有効にincludeか、 exclude必要があります。
npxまたはyarn dlxでTypeScriptを実行すると、コードは一時node_modulesディレクトリ内に存在します。
node_modulesの内容は、デフォルトでは無視されます。実行が失敗した場合は、 skipIgnore有効にします。
これらのトリックは、TSノードを高速にします。
多くの場合、テストや糸くずの一部としてTypeCheckを使用する方が良いことです。これを行うには、 tsc --noEmitを実行できます。これらの場合、TSノードはタイプチェックをスキップして、はるかに高速にすることができます。
TS-Nodeでタイプチェックをスキップするには、次のいずれかを実行します。
transpileOnly TS-Nodeでタイプチェックする必要がある場合:
require()を避けます。 importを好みます--filesの有無にかかわらず試してみてください。プロジェクトに応じて、より速い場合がありますtsc --showConfig ;実行されたすべてのファイルが含まれていることを確認してくださいskipLibCheck有効にします@typesロードを避けるために、 types配列を設定しますTSノードは、 .ts 、 .tsx 、 .js 、および/または.jsx拡張機能のフックを登録することで機能します。
バニラnode 、ディスクからコードを読んで実行することにより、 .jsをロードします。私たちのフックは中央で実行され、CodeをTypeScriptからJavaScriptに変換し、結果を実行のためにnodeに渡します。この変換は、 tscを介してコンパイルしたかのようにtsconfig.json尊重します。
また、他のいくつかのフックを登録して、Sourcemapsをスタックトレースに適用し、 .jsインポートから.tsに再マップします。
TS-Nodeは特定のファイルを変換し、他のファイルを無視します。このメカニズムを「スコーピング」と呼びます。 Scopingを構成するためのさまざまなオプションがあります。これにより、TS-Nodeはプロジェクト内のファイルのみを変換します。
警告:
無視されたファイルは、node.jsによってまだ実行できます。ファイルを無視するということは、TypeScriptからJavaScriptに変換しないことを意味しますが、実行を妨げません。
ファイルに変換が必要であるが無視されている場合、ノードはそれを解決できないか、バニラJavaScriptとして実行しようとする場合があります。ノードはタイプスクリプトタイプの構文やブリードエッジECMAScript機能を理解していないため、構文エラーやその他の障害を引き起こす可能性があります。
.jsおよび.jsxは、 allowJsが有効になっている場合にのみ変換されます。
.tsxと.jsxは、 jsxが有効になっている場合にのみ変換されます。
警告:
ts-nodeが
allowJsで使用される場合、すべての非イノードJavaScriptファイルはTSノードによって変換されます。
node_modulesをスキップしますデフォルトでは、TS-Nodeは/node_modules/にファイルをコンパイルしないようにします。
node_modulesに非コンパイルされたタイプスクリプトをインポートする必要がある場合は、 --skipIgnoreまたはTS_NODE_SKIP_IGNOREを使用して、この制限をバイパスします。
タイプスクリプトファイルと同じ名前のコンパイルされたJavaScriptファイルが既に存在する場合、TypeScriptファイルは無視されます。 TS-Nodeは、事前にコンパイルされたJavaScriptをインポートします。
TS-Nodeを強制して、プリコンパイルされたJavaScriptではなくTypeScriptソースをインポートするには、 --preferTsExts使用します。
当社のscopeとscopeDirオプションは、ディレクトリ内のファイルへの変換を制限します。
私たちのignoreオプションは、1つ以上の正規表現に一致するファイルを無視します。
TSSConfig-Pathsと一緒にTS-Nodeを使用して、 tsconfig.jsonのpathsセクションに従ってモジュールをロードできます。
{
"ts-node" : {
// Do not forget to `npm i -D tsconfig-paths`
"require" : [ "tsconfig-paths/register" ]
}
}公式タイプスクリプトハンドブックは、「追加のモジュール解像度フラグ」の"paths"の意図された目的を説明しています。
TypeScriptコンパイラには、最終出力を生成するためにソースに発生すると予想される変換をコンパイラに通知する追加のフラグセットがあります。
コンパイラがこれらの変換のいずれも実行しないことに注意することが重要です。これらの情報を使用して、モジュールのインポートを定義ファイルに解決するプロセスをガイドします。
これは、 "paths"は、ビルドツールまたはランタイムが既に実行されているマッピングを記述することを目的としており、ビルドツールやランタイムにモジュールの解決方法を指示することではありません。言い換えれば、彼らは私たちがnodeをすでに理解している方法で私たちのインポートを書くことを意図しています。このため、TS-Nodeは、 nodeのモジュール解像度の動作を変更して"paths"マッピングを実装していません。
一部のプロジェクトでは、追加の機能を追加するパッチ付きタイプスクリプトコンパイラが必要です。たとえば、 ttypescriptとts-patchカスタムトランスを構成する機能を追加します。これらは、バニラtypescriptモジュールのドロップイン交換であり、同じAPIを実装しています。
たとえば、 ttypescriptとts-transformer-keys使用するには、 tsconfig.jsonにこれを追加します。
{
"ts-node" : {
// This can be omitted when using ts-patch
"compiler" : "ttypescript"
} ,
"compilerOptions" : {
// plugin configuration is the same for both ts-patch and ttypescript
"plugins" : [
{ "transform" : "ts-transformer-keys/transformer" }
]
}
} TSノードは、サードパーティのトランスピラーをプラグインとしてサポートしています。 SWCなどのトランスピラーは、TypeScriptコンパイラよりもはるかに速くTypeScriptに変換できます。 TS-Nodeの自動tsconfig.jsonディスカバリー、SourceMapサポート、およびグローバルTSノードCLIの恩恵を受けることができます。プラグインは、プロジェクトボイラープレートを簡素化する既存のtsconfig.jsonから適切な構成を自動的に導き出します。
コンパイラとトランスピラーの違いは何ですか?
私たちの目的のために、コンパイラはTypeScriptのAPIを実装し、TypeCheckingを実行できます。サードパーティのトランスピラーはそうではありません。どちらもタイプスクリプトをJavaScriptに変換します。
transpilerオプションでは、TSノードを備えたサードパーティトランスピラープラグインを使用できます。 transpilerにはrequire() d。組み込みのswcプラグインはts-node/transpilers/swcとして公開されます。
たとえば、仮想的な「 @cspotcode/fast-ts-compiler」を使用するには、最初にプロジェクトにインストールします。NPM npm install @cspotcode/fast-ts-compiler
次に、Tsconfigに以下を追加します。
{
"ts-node" : {
"transpileOnly" : true ,
"transpiler" : "@cspotcode/fast-ts-compiler"
}
}独自のトランスピラープラグインを書くには、APIドキュメントを確認してください。
プラグインはts-nodeでrequire() dであるため、ローカルスクリプトまたはnpmに公開されるノードモジュールにすることができます。モジュールは、 TranspilerModuleインターフェイスによって記述されたcreate機能をエクスポートする必要があります。 create 、StartupでTSノードによって呼び出され、1つ以上のトランスピラーインスタンスを作成します。インスタンスは、TypeScriptをJavaScriptに変換するために使用されます。
作業例については、バンドルされたSWCプラグインをご覧ください:https://github.com/typestrong/ts-node/blob/main/src/transpilers/swc.ts
可能な限り、このセクションで説明するオプションではなく、TypeScriptの
NodeNextまたはNode16モードを使用することをお勧めします。"module": "NodeNext"と.ctsファイル拡張機能を使用すると、ほとんどのプロジェクトでうまく機能するはずです。
CommonJSまたはネイティブECMAScriptモジュールのいずれかとして、ファイルのコンパイルおよび実行方法を決定するとき、TSノードはnodeとtsc動作に一致します。これは、 tsconfig.json "module"オプションに従ってタイプスクリプトファイルが変換され、 package.json "type"フィールドのNodeのルールに従って実行されることを意味します。 "module": "NodeNext"設定すると、すべてが機能するはずです。
まれに、一部のファイルのこの動作をオーバーライドする必要がある場合があります。たとえば、一部のツールでは、 name-of-tool.config.tsを読み取り、そのファイルをCommonJSとして実行する必要があります。 "type"で構成されたpackage.jsonがある場合"type": "module"とtsconfig.json "module": "esnext"を備えた場合、構成はデフォルトでネイティブEcmascriptであり、エラーが発生します。 CommonJSとして実行するように設定およびサポートスクリプトを強制する必要があります。
これらの状況では、 moduleTypesオプションは、特定のファイルをcommonjsまたはESMにオーバーライドできます。 .mts 、 .cts 、 .cjsおよび.mjsファイル拡張子を使用して、同様のオーバーライドが可能です。 moduleTypes 、 .tsおよび.jsファイルに対して同じ効果を達成し、 tsconfig.json "module"を適切に上書きします。
次の例では、ts-nodeにcommonjsとしてWebpack構成を実行するように指示されています。
{
"ts-node" : {
"transpileOnly" : true ,
"moduleTypes" : {
"webpack.config.ts" : "cjs" ,
// Globs are also supported with the same behavior as tsconfig "include"
"webpack-config-scripts/**/*" : "cjs"
}
} ,
"compilerOptions" : {
"module" : "es2020" ,
"target" : "es2020"
}
}各キーは、TSCONFIGの"include"アレイと同じ構文を持つGLOBパターンです。複数のパターンが同じファイルと一致する場合、最後のパターンが優先されます。
cjs 、一致するファイルをオーバーライドして、CommonJSとしてコンパイルおよび実行します。esm 、ファイルをオーバーライドして、ネイティブECMAScriptモジュールとしてコンパイルおよび実行します。package 、上記のいずれかをデフォルトの動作にリセットします。 package.json "type"とtsconfig.json "module"オプションに従います。オーバーライドされたモジュールタイプを持つファイルは、 isolatedModulesと同じ制限で変換されます。これはconst enum sを使用してpreserveConstEnums無効にするなど、まれなケースにのみ影響します。
この機能は、通常のcompilerOptionsとpackage.json構成が不可能なシナリオを促進するためのものです。たとえば、 webpack.config.tsには、 "type"をオーバーライドするために独自のpackage.jsonを提供することはできません。可能な限り、従来のpackage.jsonとtsconfig.json構成を使用することを好む必要があります。
TS-Nodeの完全なAPIは、APIドキュメントで文書化されています
ここにあなたが達成できることのいくつかのハイライトがあります:
create()フックを登録せずにTSノードのコンパイラサービスを作成します。createRepl() 、REPLサービスのインスタンスを作成するため、独自のTypeScriptを搭載したREPLを作成できます。createEsmHooks() 、ESMローダーフックを作成します。TS-Nodeは、Nodeにファーストクラスのタイプスクリプトサポートを追加することに焦点を当てています。ファイルとコードのリロードを見ることは、プロジェクトの範囲外です。
ファイルの変更でts-nodeプロセスを再起動する場合は、nodemon、onchange、node-devの作業などの既存のnode.jsツールを変更します。
また、ファイルの変更でプロセスを再起動するコンパイルにTS-Nodeを使用して、 node-devの変更されたバージョンであるts-node ts-node-devあります。 ts-node-devネイティブESMローダーと互換性がないことに注意してください。
package.jsonを介してAVAを構成していると仮定すると、次の構成のいずれかを追加します。
package.jsonに"type": "module"がない場合は、この構成を使用します。
{
"ava" : {
"extensions" : [
"ts"
] ,
"require" : [
"ts-node/register"
]
}
}この構成は、 package.jsonに"type": "module"がある場合に必要です。
{
"ava" : {
"extensions" : {
"ts" : "module"
} ,
"nonSemVerExperiments" : {
"configurableModuleFormat" : true
} ,
"nodeArguments" : [
"--loader=ts-node/esm"
]
}
} TSノードサポートは、Gulpに組み込まれています。
# Create a `gulpfile.ts` and run `gulp`.
gulp参照:https://gulpjs.com/docs/en/getting-started/javascript-and-gulpfiles#transpilate
新しいnode.js構成を作成し、 -r ts-node/register 「ノードパラメーター」に追加します。
注: --project <tsconfig.json> Command Line引数を構成オプションに従って使用し、Intellijで起動するときにこの同じ動作を適用したい場合、「環境変数」: TS_NODE_PROJECT=<tsconfig.json>を指定します。
mocha --require ts-node/register --extensions ts,tsx --watch --watch-files src ' tests/**/*.{ts,tsx} ' [...args]または、Mocha構成ファイルを介してオプションを指定します。
{
// Specify "require" for CommonJS
"require" : "ts-node/register" ,
// Specify "loader" for native ESM
"loader" : "ts-node/esm" ,
"extensions" : [ "ts" , "tsx" ] ,
"spec" : [
"tests/**/*.spec.*"
] ,
"watch-files" : [
"src"
]
}参照:https://mochajs.org/#configuring-mocha-nodejs
mocha --require ts-node/register --watch-extensions ts,tsx " test/**/*.{ts,tsx} " [...args]注: --watch-extensions --watchモードでのみ使用されます。
ts-node node_modules/tape/bin/tape [...args]新しいnode.jsデバッグ構成を作成し、 -r ts-node/registerにノードargsに登録し、 program argsリストに移動します(したがって、vsコードはoutFilesを探しません)。
{
"configurations" : [ {
"type" : "node" ,
"request" : "launch" ,
"name" : "Launch Program" ,
"runtimeArgs" : [
"-r" ,
"ts-node/register"
] ,
"args" : [
"${workspaceFolder}/src/index.ts"
]
} ] ,
}注: --project <tsconfig.json> Command Line引数を構成オプションに従ってコマンドライン引数を使用し、VSコードで起動するときにこの同じ動作を適用したい場合、起動構成に「env」キーを追加します"env": { "TS_NODE_PROJECT": "<tsconfig.json>" } 。
多くの場合、 NODE_OPTIONS設定すると、他のノードツール、子プロセス、およびワーカースレッド内のts-node有効になります。
NODE_OPTIONS= " -r ts-node/register "または、ネイティブのESMサポートが必要な場合:
NODE_OPTIONS= " --loader ts-node/esm "これにより、この環境変数を受信して、他のコードを実行する前にts-nodeのフックをインストールするノードプロセスが表示されます。
TSノードは、MITライセンスの下でライセンスされています。 mit
TS-Nodeには、MITライセンスの下でライセンスされているnode.jsのソースコードが含まれています。 node.jsライセンス情報
TSノードには、Apacheライセンス2.0の下でライセンスされているTypeScriptコンパイラのソースコードが含まれています。タイプスクリプトライセンス情報