You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置ESLint为路径别名添加行间距?

问题:ESLint导入排序中为不同路径别名添加行间距

我的ESLint自动导入排序配置目前运行正常,React相关导入位于顶部,其余导入已分组且组间有空格,但希望不同路径别名(如@components、@hooks等)之间也能添加行间距。当前所有自定义别名都被归为internal组,组内没有空行分隔。

以下是我的配置文件:

.eslintrc.js

module.exports = {
  root: true,
  extends: '@react-native-community',
  parser: '@typescript-eslint/parser',
  plugins: ['@typescript-eslint', 'import'],
  overrides: [
    {
      files: ['*.ts', '*.tsx'],
      rules: {
        'no-undef': 'off',
        'no-shadow': 'off',
        'react/jsx-uses-react': 'off',
        'react/react-in-jsx-scope': 'off',
        '@typescript-eslint/no-shadow': ['error'],
        'sort-imports': [
          'error',
          { ignoreCase: true, ignoreDeclarationSort: true },
        ],
        'import/order': [
          'error',
          {
            groups: [
              ['external', 'builtin'],
              'internal',
              ['sibling', 'parent'],
              'index',
            ],
            pathGroups: [
              {
                pattern: '@(react|react-native)',
                group: 'external',
                position: 'before',
              },
              {
                pattern: '@tests/**',
                group: 'internal',
              },
              {
                pattern: '@assets/**',
                group: 'internal',
              },
              {
                pattern: '@components/**',
                group: 'internal',
              },
              {
                pattern: '@config/**',
                group: 'internal',
              },
              {
                pattern: '@constants/**',
                group: 'internal',
              },
              {
                pattern: '@hooks/**',
                group: 'internal',
              },
              {
                pattern: '@jotai/**',
                group: 'internal',
              },
              {
                pattern: '@navigation/**',
                group: 'internal',
              },
              {
                pattern: '@routes/**',
                group: 'internal',
              },
              {
                pattern: '@screens/**',
                group: 'internal',
              },
              {
                pattern: '@theme/**',
                group: 'internal',
              },
              {
                pattern: '@types/**',
                group: 'internal',
              },
              {
                pattern: '@utils/**',
                group: 'internal',
              },
            ],
            pathGroupsExcludedImportTypes: ['internal', 'react'],
            'newlines-between': 'always',
            alphabetize: {
              order: 'asc',
              caseInsensitive: true,
            },
          },
        ],
      },
    },
  ],
};

tsconfig.json

{
  "extends": "@tsconfig/react-native/tsconfig.json",
  "compilerOptions": {
    "strict": true,
    "skipLibCheck": true,
    "baseUrl": ".",
    "paths": {
      "@tests/*": ["src/__tests__/*"],
      "@assets/*": ["src/assets/*"],
      "@components/*": ["src/components/*"],
      "@config/*": ["src/config/*"],
      "@constants/*": ["src/constants/*"],
      "@hooks/*": ["src/hooks/*"],
      "@jotai/*": ["src/jotai/*"],
      "@navigation/*": ["src/navigation/*"],
      "@routes/*": ["src/routes/*"],
      "@screens/*": ["src/screens/*"],
      "@theme/*": ["src/theme/*"],
      "@app/types/*": ["src/types/*"],
      "@app/utils/*": ["src/utils/*"]
    }
  }
}

解决方案

要实现不同路径别名之间的行间距,核心是让每个别名成为独立的分组,从而触发newlines-between: always的规则。你可以通过以下两种方式修改配置:

方法1:启用separateGroups选项(推荐)

在import/order规则中添加separateGroups: true,该选项会让每个pathGroup作为独立的分组,即使它们属于同一个group,组间也会自动添加空行。

修改后的.eslintrc.js中import/order部分:

'import/order': [
  'error',
  {
    groups: [
      ['external', 'builtin'],
      'internal',
      ['sibling', 'parent'],
      'index',
    ],
    pathGroups: [
      // 保持原有的pathGroups配置不变
      {
        pattern: '@(react|react-native)',
        group: 'external',
        position: 'before',
      },
      {
        pattern: '@tests/**',
        group: 'internal',
      },
      {
        pattern: '@assets/**',
        group: 'internal',
      },
      // ...其余别名配置
    ],
    pathGroupsExcludedImportTypes: ['internal', 'react'],
    'newlines-between': 'always',
    separateGroups: true, // 新增这一行
    alphabetize: {
      order: 'asc',
      caseInsensitive: true,
    },
  },
],

方法2:为每个别名创建独立分组

如果需要更精细的控制,可以将每个别名分配到单独的自定义组中,然后在groups数组中声明这些组:

修改后的.eslintrc.js中import/order部分:

'import/order': [
  'error',
  {
    groups: [
      ['external', 'builtin'],
      '@tests',
      '@assets',
      '@components',
      '@config',
      '@constants',
      '@hooks',
      '@jotai',
      '@navigation',
      '@routes',
      '@screens',
      '@theme',
      '@types',
      '@utils',
      ['sibling', 'parent'],
      'index',
    ],
    pathGroups: [
      {
        pattern: '@(react|react-native)',
        group: 'external',
        position: 'before',
      },
      {
        pattern: '@tests/**',
        group: '@tests', // 对应自定义组名
      },
      {
        pattern: '@assets/**',
        group: '@assets',
      },
      {
        pattern: '@components/**',
        group: '@components',
      },
      // ...其余别名都对应到各自的自定义组
    ],
    pathGroupsExcludedImportTypes: ['react'],
    'newlines-between': 'always',
    alphabetize: {
      order: 'asc',
      caseInsensitive: true,
    },
  },
],

注意事项

  • 方法1更简洁,无需修改大量分组配置,适合你的现有场景。
  • 修改配置后,记得重启ESLint服务或重新lint代码,确保配置生效。
  • 两种方法都会保留原有的排序规则,同时在不同别名导入之间添加空行。

圣诞快乐!

内容的提问来源于stack exchange,提问作者user14263509

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 09:35:16