※このブログではサーバー運用、技術の検証等の費用のため広告をいれています。
記事が見づらいなどの問題がありましたらContactからお知らせください。


【Nest.js】eslintで絶対パスのimportを強制する方法

TypeScript nest.js

投稿日:2023年3月1日

このエントリーをはてなブックマークに追加
この記事ではeslintを使用してNest.jsアプリケーションで相対パスのimportを禁止して絶対パスのimportを許可する方法について詳しく解説しています。

はじめに

相対パスのimportと絶対パスのimport

typescriptではimport { AppModule } from '../app.module';のような相対パスでのimportと、import { AppModule } from 'src/app.module';絶対パスでのimportの両方をサポートしていますが、前者はディレクトリの構造が変化した場合のimport文の変更や、ローカルのモジュールを作成した場合の自動importなどで、少々ややこしいことになることがあります。

どちらのimportでも扱えるのは柔軟という意味では強いのですが、複数人で開発する際にはどちらを使用するのかルールを厳格に決めておくのが良さそうです。

個人的には冒頭に説明した理由から絶対パスのimportによりメリットを感じているため、この記事では、eslintを使用して相対パスを禁止する方法について解説します。

環境

この記事のコードは以下の環境で確認されました。

  • node.js version 18.13.0
  • npm version 8.19.1
  • Nest.js version 9.0.0

実践

方法1

まずはパッケージをインストールします。

ターミナル
$ npm i -D eslint-plugin-no-relative-import-paths

次にeslintの設定を追加します。

.eslint.js
module.exports = {
  // [...]

  // no-relative-import-pathsを追加
  plugins: ['@typescript-eslint/eslint-plugin', 'no-relative-import-paths'],

  // [...]
  rules: {
    // [...]
    'no-relative-import-paths/no-relative-import-paths': [
      'error',
      {
        'allowSameFolder': false,
        'rootDir': './'
      }
]
    // [...]

plugin'no-relative-import-paths'rules'no-relative-import-paths/no-relative-import-paths'のルールを追加すればOKです。

ルールについては公式のドキュメントを見ていただくと良いと思います。

ここで'no-relative-import-paths/no-relative-import-paths'の設定するrootDirのパスはtsconfigcompilerOptions.baseUrlと一致するようにしてください。

tsconfig.json
{
  "compilerOptions": {
    "baseUrl": "./"
  }
}
このエントリーをはてなブックマークに追加


関連記事

記事へのコメント