目的:自留备份,用者自取
基础配置
1 基于vscode编辑器,prettier插件需要下载
2 eslint配置项规则:
https://eslint.bootcss.com/docs/rules/
3 prettier配置项规则:
https://prettier.io/docs/en/options.html
安装插件
"devDependencies": {"eslint": "^7.32.0","eslint-plugin-prettier": "^4.2.1"}
配置文件问题:
如果项目中带有.vscode文件夹,这里面的setting.json会覆盖全局的setting.json,这样对vscode编辑器做的配置,会被覆盖掉。同样,如果不想修改vscode的全局配置,也可以在这里做个性化的配置。
.vscode -> settings.json 配置项
{// vscode默认启用了根据文件类型自动设置tabsize的选项"editor.detectIndentation": false,// 重新设定tabsize"editor.tabSize": 2,// 每次保存的时候自动格式化"editor.formatOnSave": true,"javascript.format.enable": true,// 让函数(名)和后面的括号之间取消空格"javascript.format.insertSpaceBeforeFunctionParenthesis": false,"explorer.confirmDelete": false,// 启用保存时自动修复eslint,默认只支持.js文件"editor.codeActionsOnSave": {"source.fixAll.eslint": true},// 保存时格式自动对齐"editor.defaultFormatter": "esbenp.prettier-vscode",// 用eslint的规则检测js文件"eslint.validate": ["javascript"]
}
prettierrc.js配置项
module.exports = {// prettier的配置printWidth: 80, // 每行最多多少个字符换行tabWidth: 2, // tab缩进大小,默认为2useTabs: false, // 使用tab缩进,默认falsesemi: false, // 使用分号, 默认truesingleQuote: true, // 使用单引号, 默认false(在jsx中配置无效, 默认都是双引号)quoteProps: 'as-needed', // 仅在需要时在对象属性周围添加引号jsxSingleQuote: false, // 单引号trailingComma: 'all', // 行尾逗号bracketSpacing: true, // 花括号内填充空格 { a: 23 }bracketSameLine: false, // 最后的尾尖括号(>)放在同一行还是换行arrowParens: 'avoid', // 箭头函数一个参数是否使用括号包裹参数eslintIntegration: true, // #让prettier使用eslint的代码格式进行校验
}
eslintrc.js配置项
这部分可变化的空间很大,可繁可简,微信小程序开发的时候还可以加配wxml格式校验,常规vue、wx小程序、egg.js、nuxt.js语法各有不同,在配置的时候,灵活变通
vue管理后台(框架带的,配置比较详细,很多内容规定很严格)
module.exports = {root: true,env: {node: true,},extends: ['vue-global-api','plugin:vue/vue3-recommended','eslint:recommended','plugin:@typescript-eslint/recommended','@vue/typescript/recommended','plugin:prettier/recommended',],parser: 'vue-eslint-parser',parserOptions: {parser: {js: 'espree',ts: '@typescript-eslint/parser','<template>': 'espree',},sourceType: 'module',ecmaFeatures: {jsx: true,tsx: true,},warnOnUnsupportedTypeScriptVersion: false,},rules: {'no-undef': 'off','no-console': 'off','no-debugger': 'off','prettier/prettier': 'warn','prefer-template': 'error','vue/no-reserved-component-names': 'off','@typescript-eslint/no-this-alias': 'off','@typescript-eslint/no-explicit-any': 'off','@typescript-eslint/no-var-requires': 'off','@typescript-eslint/no-empty-function': 'off','@typescript-eslint/ban-ts-comment': 'off','vue/no-v-html': 'off','vue/html-self-closing': ['error',{html: {void: 'any',normal: 'any',component: 'always',},svg: 'always',math: 'always',},],// 多字组件名称'vue/multi-word-component-names': 'off',// Vue.js风格指南(https://cn.vuejs.org/v2/style-guide/)// Vue组件排序'vue/order-in-components': ['warn',{order: ['el','name','key','parent','functional',['delimiters', 'comments'],['components', 'directives', 'filters'],'extends','mixins',['provide', 'inject'],'ROUTER_GUARDS','layout','middleware','validate','scrollToTop','transition','loading','inheritAttrs','model',['props', 'propsData'],'emits','setup','fetch','asyncData','data','head','computed','watch','watchQuery','LIFECYCLE_HOOKS','methods',['template', 'render'],'renderError',],},],// Vue属性排序'vue/attributes-order': ['warn',{order: ['DEFINITION','LIST_RENDERING','CONDITIONALS','RENDER_MODIFIERS','GLOBAL','UNIQUE','TWO_WAY_BINDING','OTHER_DIRECTIVES','OTHER_ATTR','EVENTS','CONTENT',],alphabetical: true, //字母顺序},],},overrides: [{files: ['**/__tests__/*.{j,t}s?(x)','**/tests/unit/**/*.spec.{j,t}s?(x)',],env: {jest: true,},},{files: ['**/__tests__/*.{j,t}s?(x)','**/tests/unit/**/*.spec.{j,t}s?(x)',],env: {jest: true,},},],
}
微信小程序(自配,同时夹杂对wxml的校验)
module.exports = {root: true,// 标记当前代码最终的运行环境env: {es2021: true,node: true,},// 设置多个共享配置extends: 'eslint:recommended',parserOptions: {ecmaVersion: 2021,sourceType: 'module',},overrides: [{files: ['*.js'],rules: {'no-unused-vars': 'error','no-console': 'off','generator-star-spacing': 'off', // 强制 generator 函数中 * 号周围使用一致的空格// 'no-mixed-operators': 'error', // 禁止混合使用不同的操作符,用括号区分开来quotes: [// 改双引号为单引号'error','single',{avoidEscape: true, // 允许字符串使用单引号或双引号,只要字符串中包含了一个其它引号,否则需要转义allowTemplateLiterals: true, // 允许字符串使用反勾号},],semi: [// 去结尾分号2,'never',{beforeStatementContinuationChars: 'never',},],'no-delete-var': [2],'object-curly-spacing': ['error', 'always'], // 强制在花括号中使用一致的空格'array-bracket-spacing': ['error', 'never'], // 禁止或强制在括号内使用空格'array-bracket-newline': ['error', { multiline: true }], // 强制数组元素间出现换行 (array-element-newline)'eol-last': ['error', 'always'], // 要求或禁止文件末尾保留一行空行 (eol-last)'func-call-spacing': ['error', 'never'], // 要求或禁止在函数标识符和其调用之间有空格'space-before-function-paren': ['error',{anonymous: 'always',named: 'never',asyncArrow: 'always',},], // 要求或禁止函数圆括号之前有一个空格indent: ['error', 2], // 强制在对象字面量的键和值之间使用一致的空格'key-spacing': ['error', { beforeColon: false }],'keyword-spacing': ['error', { before: true }], // 强制关键字周围空格的一致性// 'linebreak-style': ['error', 'windows'], // 强制使用一致的换行符风格'no-trailing-spaces': 'error', // 禁用行尾空白'no-whitespace-before-property': 'error', // 禁止属性前有空白'semi-spacing': 'error', // 强制分号前后有空格'space-before-blocks': 'error', // 要求或禁止语句块之前的空格'space-in-parens': ['error', 'never'], // 禁止或强制圆括号内的空格'space-infix-ops': 'error', // 要求中缀操作符周围有空格'switch-colon-spacing': 'error', // 强制在 switch 的冒号左右有空格,'comma-spacing': ['error', { before: false, after: true }],'dot-notation': ['error'], // 强制尽可能地使用点号// 'eqeqeq': ['error', 'always'], // 要求使用 === 和 !=='no-dupe-keys': 'error', // 禁止对象字面量中出现重复的 key'arrow-spacing': 'error', // es6箭头函数空格},},{files: ['*.wxml'],plugins: ['wxml'],// processor: 'wxml/wxml',parser: '@wxml/parser',rules: {'wxml/no-dot-this-in-wx-key': 'error', // 禁止使用this作为key'wxml/empty-tag-self-closing': 'error', // 强制空标签自闭合'wxml/event-binding-style': ['error', 'no-colon'], // 强制事件绑定样式 colon: bind:tap no-colon bindtap'wxml/max-len': 'error', // 设置单行代码最大宽度'wxml/no-duplicate-attributes': 'error', // 禁止使用重复的属性'wxml/no-inconsistent-tagname': 'error', // 禁止不配对的标签名'wxml/no-inline-wxs': 'error', // 禁止使用内联wxs'wxml/no-unexpected-string-bool': 'error', // 禁止使用布尔字符串 关键字需要在双引号之内'wxml/no-vue-directive': 'error', // 禁止在微信小程序里错误的使用vuejs指令'wxml/no-wx-for-with-wx-if': 'error', // 禁止wx:for和wx:if|wx:elseif|wx:else在同一个标签使用'wxml/report-wxml-syntax-error': 'error', // 允许提示wxml语法错误'wxml/report-wxs-syntax-error': 'error', // 允许提示内联wxs里的js语法错误'wxml/wx-key': 'error', // wx:for循环时必须声明wx-key},},],globals: {wx: true,App: true,Page: true,getCurrentPages: true,getApp: true,Component: true,requirePlugin: true,requireMiniProgram: true,},
}
其他,删删减减的,自己看着办吧,如果出现冲突,改其中一个,适配到另一个(prettier和eslint冲突,修改eslint适配prettire或者反过来)
/** Eslint config file* Documentation: https://eslint.org/docs/user-guide/configuring/* Install the Eslint extension before using this feature.*/
module.exports = {env: {es6: true,browser: true,node: true,},ecmaFeatures: {modules: true,},parserOptions: {ecmaVersion: 2018,sourceType: 'module',ecmaFeatures: {experimentalObjectRestSpread: true,modules: true,spread: true,restParams: true,},},globals: {wx: true,App: true,Page: true,getCurrentPages: true,getApp: true,Component: true,requirePlugin: true,requireMiniProgram: true,},extends: 'eslint:recommended',rules: {'no-unused-vars': 'error','no-console': 'off','generator-star-spacing': 'off', // 强制 generator 函数中 * 号周围使用一致的空格// 'no-mixed-operators': 'error', // 禁止混合使用不同的操作符,用括号区分开来quotes: [// 改双引号为单引号'error','single',{avoidEscape: true, // 允许字符串使用单引号或双引号,只要字符串中包含了一个其它引号,否则需要转义allowTemplateLiterals: true, // 允许字符串使用反勾号},],semi: [// 去结尾分号2,'never',{beforeStatementContinuationChars: 'never',},],'no-delete-var': [2],'object-curly-spacing': ['error', 'always'], // 强制在花括号中使用一致的空格'array-bracket-spacing': ['error', 'never'], // 禁止或强制在括号内使用空格'array-bracket-newline': ['error', { multiline: true }], // 强制数组元素间出现换行 (array-element-newline)'eol-last': ['error', 'always'], // 要求或禁止文件末尾保留一行空行 (eol-last)'func-call-spacing': ['error', 'always'], // 要求或禁止在函数标识符和其调用之间有空格indent: ['error', 2], // 强制在对象字面量的键和值之间使用一致的空格'key-spacing': ['error', { beforeColon: false }],'keyword-spacing': ['error', { before: true }], // 强制关键字周围空格的一致性// 'linebreak-style': ['error', 'windows'], // 强制使用一致的换行符风格'no-trailing-spaces': 'error', // 禁用行尾空白'no-whitespace-before-property': 'error', // 禁止属性前有空白'semi-spacing': 'error', // 强制分号前后有空格'space-before-blocks': 'error', // 要求或禁止语句块之前的空格'space-before-function-paren': ['error', 'always'], // 要求或禁止函数圆括号之前有一个空格'space-in-parens': ['error', 'never'], // 禁止或强制圆括号内的空格'space-infix-ops': 'error', // 要求中缀操作符周围有空格'switch-colon-spacing': 'error', // 强制在 switch 的冒号左右有空格,'comma-spacing': ['error', { before: false, after: true }],'dot-notation': ['error'], // 强制尽可能地使用点号// 'eqeqeq': ['error', 'always'], // 要求使用 === 和 !=='no-dupe-keys': 'error', // 禁止对象字面量中出现重复的 key'arrow-spacing': 'error', // es6箭头函数空格},
}