簡體   English   中英

Eslint:手動控制絕對和相對導入

[英]Eslint: Manually control absolute and relative imports

我想要一個 eslint 規則,該規則將為從目錄內部導入的所有內容提供相對導入路徑,為從目錄外部導入的所有內容提供絕對路徑。

示例:這是我的文件結構


/Dashboard
    /components
        /Component1.tsx
/Home
    /components
        /Component2.tsx
        /Component3.tsx
    /utils
        /util1.ts
style.ts

我想在我的目錄中進行相對導入,並對從我的目錄外部導入的所有內容進行絕對導入。

我的 Component2.tsx 的導入應該是這樣的

import Component3 from './Component3'
import util1 from './../util1'
import FlexBox from './../../styled'
import Component1 from 'Dashboard/components/component1' // this should be absolute


這樣的事情能行嗎?

要僅在 Home 目錄中強制執行相對導入,您可以配置規則no-restricted-imports以禁止以“Home”開頭的導入。

將此規則添加到 ESLint 配置文件中:

{
  rules: {
    "no-restricted-imports": [
      "error",
      {
        "patterns": ["Home/*"]
      }
    ]
  }
}

如果要導入的模塊名稱以“Home”開頭,這將產生錯誤。

Component2.tsx中:

import Component3 from 'Home/components/Component3' //error
import util1 from 'Home/utils/util1' //error
import FlexBox from 'Home/abc/xyz/styled' //error
import Component1 from 'Dashboard/components/component1' //no error

如果您也想對 Dashboard 目錄執行相同的操作,則需要為每個目錄使用單獨的配置。 您可以使用 ESLint 配置文件中的overrides鍵來執行此操作:

{
  "overrides": [
    {
      "files": ["Home/*"],
      rules: {
        "no-restricted-imports": [
          "error",
          {
            "patterns": ["Home/*"]
          }
        ]
      }
    },
    {
      "files": ["Dashboard/*"],
      rules: {
        "no-restricted-imports": [
          "error",
          {
            "patterns": ["Dashboard/*"]
          }
        ]
      }
    }
  ]
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM