2020年7月19日日曜日

TypeScriptのimport文で拡張子を解決するツールをつくってみた

つくったのは2ヶ月くらい前ですが。

何をやりたかったかというと、「Node.js用に書いたコードをDenoでも動かしたい」というのが動機です。

以前さくらのナレッジに寄稿したとおり、Denoではモジュールの指定に拡張子が必須になったので、従来のNode.jsのコード(特にTypeScriptで書いている場合)はそのままでは動きません。

そこで、拡張子を解決するツールを作ってやればDenoでも動かせるんじゃね?と思いました。

ツールの紹介


はい。何のひねりもない名前です。
使い方は簡単で、コマンドラインから
deno-module-extension-resolver SRC_DIR DST_DIR
と実行すると、
  • SRC_DIR内にある*.js / *.tsを再帰的に探す
  • 見つけたファイル内にあるimport文から、import対象のファイルの拡張子を解決する
  • 解決したソースコードはDST_DIRに元のディレクトリー構造を保ったまま同じ名前で保存する
といった処理を行います。
ただし、import対象が絶対パスでも相対パスでもない場合(import "foo"など)や解決できるファイルが存在しない場合は何も手を加えません。

ちなみにvalue-schemaはNode.jsにもDenoにも対応していますが、Deno対応にはこのツールを使っています。

使用上の注意

お気づきの通り、このツールはあくまで絶対パスまたは相対パスで指定されたimport文の拡張子を解決するだけであって、それ以外のNPMモジュールやコアライブラリーに対しては無力です。

つまり、このツールでDeno対応できるのは、もともと外部のNPMモジュールにもコアライブラリーにも依存しておらず、自己完結しているものだけです。

0 件のコメント:

コメントを投稿