Skip to content
← Back to rules

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

参照