-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path.eslintrc.js
169 lines (166 loc) · 6.55 KB
/
.eslintrc.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
module.exports = {
root: true,
env: {
node: true
},
extends: [
'plugin:vue/essential',
'@vue/standard'
],
parserOptions: {
parser: 'babel-eslint'
},
rules: {
'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
'vue/component-definition-name-casing': ['error', 'PascalCase'], // 组件名称驼峰式
'vue/component-name-in-template-casing': ['error', 'PascalCase', {
registeredComponentsOnly: true // 仅检查已注册组件
}], // 组件标签驼峰式
'vue/mustache-interpolation-spacing': ['error', 'always'], // 插值间距
'vue/html-closing-bracket-spacing': ['error', {
startTag: 'never',
endTag: 'never',
selfClosingTag: 'always'
}], // 标签左右箭头的空格
'vue/html-self-closing': ['error', {
html: {
void: 'always',
normal: 'never',
component: 'always'
},
svg: 'always',
math: 'always'
}], // 标签自闭合
'vue/max-attributes-per-line': ['error', {
singleline: 5,
multiline: {
max: 1,
allowFirstLine: false
}
}], // 每行可接受的最大属性数量
'vue/html-closing-bracket-newline': ['error', {
singleline: 'never',
multiline: 'always'
}], // 闭合箭头的位置
'vue/html-end-tags': 'error', // 禁止标签未闭合
'vue/html-indent': ['error', 4, {
attribute: 1,
baseIndent: 1,
closeBracket: 0,
alignAttributesVertically: true,
ignores: []
}], // 标签和属性的缩进
'vue/html-quotes': ['error', 'single', {
avoidEscape: true
}], // 属性的单双引号以及是否需要转义属性内的单双引号
'vue/attribute-hyphenation': ['error', 'always', {
ignore: []
}], // 属性名:连字符
'vue/multiline-html-element-content-newline': ['error', {
ignoreWhenEmpty: true,
ignores: ['pre', 'textarea'],
allowEmptyLines: false
}], // 多行元素的内容前后自动换行对齐,禁止元素标签包裹处存在空行
'vue/no-multi-spaces': ['error', {
ignoreProperties: false
}], // 属性前后删除冗余空格
'vue/no-spaces-around-equal-signs-in-attribute': ['error'], // 不允许属性中等号周围有空格
'vue/attributes-order': ['error', {
order: [
'DEFINITION',
'LIST_RENDERING',
'CONDITIONALS',
'RENDER_MODIFIERS',
'GLOBAL',
'UNIQUE',
'TWO_WAY_BINDING',
'OTHER_DIRECTIVES',
'OTHER_ATTR',
'EVENTS',
'CONTENT'
],
alphabetical: true
}], // 标签属性排序
'vue/component-tags-order': ['error', {
order: ['template', 'script', 'style']
}], // 单文件组件的顶层元素排序
'vue/order-in-components': ['error', {
order: [
'el',
'name',
'parent',
'functional',
'delimiters',
'comments',
'components',
'mixins',
'directives',
'filters',
'extends',
'inheritAttrs',
'model',
['props', 'propsData'],
'fetch',
'asyncData',
'data',
'computed',
'watch',
'LIFECYCLE_HOOKS',
'methods',
'head',
['template', 'render'],
'renderError'
]
}], // 组件内属性的声明顺序
'vue/this-in-template': ['error', 'never'], // 禁止在模板内使用this
'vue/script-indent': ['error', 4, {
baseIndent: 0,
switchCase: 1,
ignores: []
}], // vue组件内的script代码缩进
indent: ['error', 4], // 代码缩进
'vue/padding-line-between-blocks': ['error', 'always'], // vue组件三个顶层元素之间留空行
'vue/object-curly-spacing': ['error', 'always'], // template属性内的花括号间距,例slot-scope='{k}' => "{ k }"
'vue/no-reserved-component-names': 'error', // 禁止组件名称使用保留字
'vue/match-component-file-name': ['error', {
// "extensions": ["vue"],
shouldMatchCase: false // 是否匹配大小写(若匹配,可能和强制大驼峰有冲突,建议false)
}], // 组件名称和文件名称是否相同
'vue/v-slot-style': ['error', {
atComponent: 'v-slot',
default: 'shorthand',
named: 'shorthand'
}], // v-slot样式
'vue/v-on-style': ['error', 'shorthand'], // @on事件样式
'vue/v-bind-style': ['error', 'shorthand'], // v-bind样式
'vue/singleline-html-element-content-newline': ['error', {
ignoreWhenNoAttributes: true,
ignoreWhenEmpty: true,
ignores: ['pre', 'textarea']
}], // 单行元素基于属性和内容是否换行
'vue/prop-name-casing': ['error', 'camelCase'], // props的key名驼峰式
'vue/require-prop-types': 'off', // props 必须定义类型
'vue/require-default-prop': 'off', // props 必须定义默认值
'vue/no-template-shadow': 'error', // 禁止多个v-for嵌套中出现的同名变量
'vue/valid-v-bind-sync': 'error', // sync是否有效
'vue/valid-v-slot': 'error', // v-slot是否有效
'vue/no-v-model-argument': 'off', // v-slot是否有效
'vue/no-multiple-template-root': 'off', // 单文件组件不允许多个根节点
'vue/no-v-for-template-key': 'off', // 单文件组件不允许多个根节点
'comma-dangle': 'off',
'dot-notation': 'off',
'prefer-promise-reject-errors': 'off',
'handle-callback-err': 'off',
'quote-props': 'off',
'no-prototype-builtins': 'off',
'camelcase': 'off',
'standard/no-callback-literal': 'off',
},
overrides: [{
files: ['*.vue'],
rules: {
indent: 'off' // 对部分文件类型禁用缩进
}
}]
}