import/named Nursery
何を行うか
リファレンスされたモジュール内の名前付きエクスポートのセットに含まれているかどうかを確認し、すべての名前付きインポートがそのセットに属していることを検証します。
export の場合、すべての名前付きエクスポートがリファレンスされたモジュール内に存在することを検証します。
注記: パッケージの場合、プラグインは package.json に存在する jsnext:main(非推奨)または module からエクスポート名を取得します。例えば、Redux の npm モジュールにはこのキーが含まれており、そのためチェック対象となります。
無視されているモジュールパス、または明確に ES モジュールではないパスは、インポート時に報告されません。タイプインポートやタイプエクスポート(Flow で使用されるもの)は常に無視されます。
なぜ問題なのか
参照モジュールに存在しない名前をインポートまたはエクスポートすると、実行時エラーを引き起こし、混乱を招く可能性があります。実際には利用できない機能があると誤解させる可能性があり、コードの保守性および理解性を低下させます。このルールにより、コードが利用可能なエクスポートを正確に反映していることを保証し、信頼性を向上させます。
例
以下のコードを前提としています。
js
// ./foo.js
export const foo = "I'm so foo";このルールに対する 不正な コードの例:
js
// ./baz.js
import { notFoo } from "./foo";
// 再エクスポート
export { notFoo as defNotBar } from "./foo";
// もし利用可能であれば、'jsnext:main' を優先する
import { dontCreateStore } from "redux";このルールに対する 正しい コードの例:
js
// ./bar.js
import { foo } from "./foo";
// 再エクスポート
export { foo as bar } from "./foo";
// jsnext:main を持たない node_modules はデフォルトでは分析されない
// (import/ignore 設定)
import { SomeNonsenseThatDoesntExist } from "react";使用方法
設定ファイルまたは CLI でこのルールを 有効化 するには、次のように使用できます:
json
{
"plugins": ["import"],
"rules": {
"import/named": "error"
}
}bash
oxlint --deny import/named --import-plugin