Skip to content
← Back to rules

import/no-absolute-path Suspicious

🚧 An auto-fix is planned for this rule, but not implemented at this time.

何をするか

このルールは、絶対パスを使用してモジュールをインポートすることを禁止します。

なぜ問題なのか

Node.js では /home/xyz/file.js のように絶対パスでモジュールをインポートすることが可能ですが、これは悪い習慣です。これは、コードが自分のコンピュータに依存するため、たとえば npm で配布されるパッケージでは使用できなくなってしまいます。

このルールに違反するコードの例:

js
import f from "/foo";
import f from "/some/path";
var f = require("/foo");
var f = require("/some/path");

このルールに準拠するコードの例:

js
import _ from "lodash";
import foo from "foo";
import foo from "./foo";

var _ = require("lodash");
var foo = require("foo");
var foo = require("./foo");

{ amd: true } オプションに対して違反するコードの例:

js
define("/foo", function (foo) {});
require("/foo", function (foo) {});

{ amd: true } オプションに対して準拠するコードの例:

js
define("./foo", function (foo) {});
require("./foo", function (foo) {});

設定

このルールは以下のプロパティを持つ設定オブジェクトを受け入れます。

amd

type: boolean

default: false

true に設定された場合、AMDスタイルの define および require 呼び出しの依存関係パスが解決されます:

js
/* import/no-absolute-path: ["error", { "commonjs": false, "amd": true }] */
define(["/foo"], function (foo) {
  /*...*/
}); // 警告対象
require(["/foo"], function (foo) {
  /*...*/
}); // 警告対象

const foo = require("/foo"); // explicit `commonjs: false` のため無視

commonjs

type: boolean

default: true

true に設定された場合、CommonJSスタイルの require 呼び出しの依存関係パスが解決されます:

js
var foo = require("/foo"); // 警告対象

esmodule

type: boolean

default: true

true に設定された場合、ESモジュール形式の import 文の依存関係パスが解決されます:

js
import foo from "/foo"; // 警告対象

使用方法

このルールを有効化するには、設定ファイルまたは CLI で以下のように使用できます:

json
{
  "plugins": ["import"],
  "rules": {
    "import/no-absolute-path": "error"
  }
}
bash
oxlint --deny import/no-absolute-path --import-plugin

参照