import导入顺序杂乱的问题

我们经常会遇到项目中的import语句顺序混乱的问题。这不仅会影响代码的可读性,还可能使我们代码在提交的时候产生不必要的冲突。

解决方案

eslint-plugin-import

开始我调研了一下eslint-plugin-import插件。这款插件的排序逻辑是这样:

  1. builtin : 这代表Node.js内置的模块,例如fspath等。

    import fs from 'fs';

  2. external: 这代表外部库或框架,通常是你通过npm或yarn安装的模块。

    import axios from 'axios';

  3. internal: 这代表项目内部的模块,但它们通常在项目的不同目录或子目录中。这些模块不是直接的父级或同级模块。

    import { someFunction } from '@utils/my-helper';

  4. parent: 这代表从父目录导入的模块。

    import something from '../something';

  5. sibling: 这代表与当前文件在同一目录下的其他文件。

    import { siblingFunction } from './sibling-module';

  6. index : 这代表从目录的index文件导入的模块。

    import { indexFunction } from './';

  7. object: 这代表导入的对象属性,例如:

    import('some-module').then(({ someExport }) => ...);

  8. type: 这代表从模块导入的类型或接口(这在TypeScript中特别有用)。

    import type { MyType } from './types';

大致分为这些模块。我们可以在eslint的规则中根据这些模块进行排序。但是这并不是我想要的排序模式,我更希望根据功能进行排序。组件放在一起,hooks放在一起,工具函数放在一起,等等。

eslint-plugin-simple-import-sort

于是我找到了eslint-plugin-simple-import-sort这个插件。使用方式如下:

  1. 安装插件:

    npm install --save-dev eslint-plugin-simple-import-sort

  2. 配置 ESLint : 在 .eslintrc.js 或你的 ESLint 配置文件中,添加以下配置:

    module.exports = {
    // ... 其他配置
    plugins: ['simple-import-sort'],
    rules: {
    'simple-import-sort/imports': 'error',
    'simple-import-sort/exports': 'error',
    },
    };

  3. 自定义排序:

    复制代码
     'simple-import-sort/imports': [
      'error',
      {
        groups: [
          [`^vue$`, `^vue-router$`, `^ant-design-vue$`, `^echarts$`], // 你可以根据需要添加更多的内置模块
            [`.*\\.vue$`], // .vue 文件
            [`.*/assets/.*`, `^@/assets$`],
            [`.*/config/.*`, `^@/config$`],
            [`.*/hooks/.*`, `^@/hooks$`],
            [`.*/plugins/.*`, `^@/plugins$`],
            [`.*/router/.*`, `^@/router$`],
            [`^@/services$`, `^@/services/.*`],
            [`.*/store/.*`, `^@/store$`],
            [`.*/utils/.*`, `^@/utils$`],
            [`^`],
            [`^type `],
        ],
      },
    ],
相关推荐
Cassie燁12 分钟前
el-button源码解读1——为什么组件最外层套的是Vue内置组件Component
前端·vue.js
北极糊的狐13 分钟前
Vue3 子组件修改父组件传递的对象并同步的方法汇总
前端·javascript·vue.js
一 乐2 小时前
餐厅管理智能点餐系统|基于java+ Springboot的餐厅管理系统(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·后端
北极糊的狐2 小时前
父组件向子组件传参时,传递数组和对象类型的参数的方法
前端·javascript·vue.js
爱泡脚的鸡腿4 小时前
uni-app D6 实战(小兔鲜)
前端·vue.js
北极糊的狐4 小时前
Vue3 中父子组件传参是组件通信的核心场景,需遵循「父传子靠 Props,子传父靠自定义事件」的原则,以下是资料总结
前端·javascript·vue.js
CoderYanger4 小时前
优选算法-优先级队列(堆):75.数据流中的第K大元素
java·开发语言·算法·leetcode·职场和发展·1024程序员节
看到我请叫我铁锤4 小时前
vue3中THINGJS初始化步骤
前端·javascript·vue.js·3d
谢尔登5 小时前
defineProperty如何弥补数组响应式不足的缺陷
前端·javascript·vue.js
CoderYanger6 小时前
C.滑动窗口——1423. 可获得的最大点数
java·开发语言·算法·leetcode·1024程序员节