eslint
Next.js 内部集成了eslint开箱即用, 可以通过 next lint 命令来检查代码是否符合eslint规范。
自定义eslint配置
可能next.js默认的eslint配置不能满足你的需求,你可以通过自定义eslint配置来满足你的需求。
- 在项目的根目录下创建 .eslintrc.js文件, 再推荐一个eslint插件,用于排列模块导入顺序的插件,先安装:npm i eslint-plugin-simple-import-sort -D,然后配置如下:
module.exports = {
    root: true,
    extends: ['eslint:recommended', 'next/core-web-vitals'],
    plugins: ['simple-import-sort'],
    rules: {
        'max-len': ['error', {code: 120}], // 允许一行最大的长度
        // 缩进
        indent: [2, 4],
        // 引号
        quotes: [2, 'single'],
        'arrow-parens': ['error', 'as-needed'], // 剪头函数一个参数时不需要圆括号
        // 对象属性引号
        'quote-props': [2, 'as-needed'],
        // 对象最后一项不加,
        'comma-dangle': [2, 'never'],
        // 末尾加;
        semi: ['error', 'always'],
        // 行不允许空格
        'no-trailing-spaces': [2],
        // 大括号空格
        'object-curly-spacing': [2, 'never'],
        'object-curly-newline': [2,  {consistent: true}], // 对象头尾是否换行
        'object-property-newline': [2, {allowAllPropertiesOnSameLine: true}], // 对象属性是否折行,动态适应
        'key-spacing': ['error', {afterColon: true}], // 冒号后留空格
        'comma-spacing': ['error', {after: true}], // 逗号后留空格
        // 文件结尾空行
        'eol-last': [2, 'always'],
        // 空行的数量
        'no-multiple-empty-lines': [2, {max: 2, maxEOF: 1}],
        'no-case-declarations': [0],
        'keyword-spacing': [2],
        'no-shadow': [2], // 重复定义
        'no-redeclare': [2],
        'no-empty': [2, {allowEmptyCatch: true}],
        'no-unused-vars': [2],
        // 针对import排序
        'simple-import-sort/imports': [1, {
            groups: [['^node:', '^[a-zA-Z]', '^@[a-zA-Z]', '^@\\/', '^\\/', '^\\.', '^\\u0000']]
        }],
        'simple-import-sort/exports': [1]
    }
};
- 如果你是vscode用户,可以安装插件 ESLint插件,并配置自动修复以提高开发效率,在.vscode文件夹下创建settings.json文件,内容如下:
{
    /* ------------------------- eslint ------------------------- */
    "editor.codeActionsOnSave": {
        "source.fixAll": "explicit"
    },
    // eslint工作目录
    "eslint.workingDirectories": [
        ".eslintrc.js",
        ".eslintrc.cjs",
        ".eslintignore"
    ],
    /* ------------------------- 允许json注释 ------------------------- */
    "files.associations": {
        "*.json": "jsonc"
    },
    /* ------------------------- typescript ------------------------- */
    "typescript.tsdk": "node_modules/typescript/lib",
    "typescript.enablePromptUseWorkspaceTsdk": true, // 启用使用工作区的ts版本
    "workbench.tree.enableStickyScroll": true // 新版vscode树形结构滚动条固定
}