find-node-modules-import: importsしてるパッケージ名やNode.jsのコアモジュールを検出するツール
find-node-modules-importという、ソースコードからimportsしてるパッケージ名を検索するシンプルなCLIを書きました。
特徴
- インポートしてるパッケージ名を全て検出できる
- インポートしてる特定のパッケージ名を検出できる
node:fs
やassert
のような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:fs
やassert
のような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のコアモジュールを使っている部分を検出するために、このツールを作りました。
- Migrate assert to invariant function · Issue #985 · textlint/textlint
- Remove
events
modules from @textlint/kernel · Issue #996 · textlint/textlint
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
お知らせ欄
JavaScript Primerの書籍版がAmazonで購入できます。
JavaScriptに関する最新情報は週一でJSer.infoを更新しています。
GitHub Sponsorsでの支援を募集しています。