TypeScript でユーティリティ的なスクリプトを開発しているとき、毎回 tsc
でコンパイルして node
で実行するのはあまりに重たいのでやってられない。
ts-node というのでコンパイル作業なしに直接 .ts ファイルを実行できるんだけど、.ts ファイルとコンパイル後の .js ファイルの位置が異なっているので微妙に困ることがある。ファイルからの相対位置で何かを指定するような場合ですね。
なので ts-node 下での実行かどうかを判定したい。process.argv[0]
らへんを見ると素の node との違いはわかるんだけど、本質的な情報ではないのでちょっと気持ち悪いところがある。
と思って調べていたらちょうどそういう話があって、結局、以下のようにして調べられるらしい。process
を拡張してるんですね。なるほど。
import { REGISTER_INSTANCE } from "ts-node"; const tsService = process[REGISTER_INSTANCE]; // これがあれば ts-node で実行中
ただ、これだと ts-node が成果物の依存に入ってしまうので、REGISTER_INSTANCE
の代わりに Symbol.for('ts-node.register.instance')
を使ったほうがいいかもしれない。どっちも微妙。
ちなみに process[REGISTER_INSTANCE]
には TypeScript コンパイラの設定が入ってるようなので、ここからさらに詳細な設定を知ることも可能そうではある。