find-node-modules-importという、ソースコードからimportsしてるパッケージ名を検索するシンプルなCLIを書きました。

特徴

  • インポートしてるパッケージ名を全て検出できる
  • インポートしてる特定のパッケージ名を検出できる
  • node:fsassertのようなNode.jsのコアモジュールを検出できる

📝 このツールは、ESMのimportのみに対応しています。 JavaScriptとTypeScriptどちらも対応しています。

使い方

Usage
  $ npx find-node-modules-import [file|glob*]

Options
  --module              [String] filter the result by module name
  --builtinModules      [Boolean] filter the result by Node.js builtin modules. Default: false
  --verbose             [Boolean] show warning/error output. Default: false

Examples
  # show all imports
  $ find-node-modules-import "src/**/*.{js,ts}"
  # show Node.js builtin modules
  $ find-node-modules-import "src/**/*.{js,ts}" --builtinModules
  # show specific module
  $ find-node-modules-import "src/**/*.{js,ts}" --module "lodash"

使い方はシンプルで、次のコマンドでインポートしてる全てのモジュール名を検出できます。

  $ npx find-node-modules-import "src/**/*.{js,ts}"

次のコマンドで、node:fsassertのようなNode.jsのコアモジュールを検出できます。

  $ npx find-node-modules-import "src/**/*.{js,ts}" --builtinModules

次のコマンドで、特定のパッケージ名を検出できます。

  $ npx find-node-modules-import "src/**/*.{js,ts}" --module "lodash"

作った理由

textlint@textlint/kernelでは、Node.jsのコアモジュールを使っている部分がありました。 webpackやViteなどはもうNode.jsのコアモジュールを自動でpolyfillしなくなったのもあり、Node.jsのコアモジュールを使っている部分を無くしたいと思いました。

そのため、Node.jsのコアモジュールを使っている部分を検出するために、このツールを作りました。

importしてるモジュールの抽出にはES Module Lexerを使っています。 最初は、Dependency cruiserを使ってやろうと思いましたがそこまでリッチじゃなくていいと思ったので、かなりシンプルな実装になってます。 普通のコマンドと同じようにストリーム処理できるように、見つけるたびに標準出力に出してるので、パイプ処理と相性良いと思います。

# textlintっぽいやつだけ出す
$ npx find-node-modules-import "**/*.{js,ts}" | grep "textlint"
# モジュール名だけを取り出す
$ npx find-node-modules-import "**/*.{js,ts}" | cut -f 2