# js 的最佳实践
pnpm i
eslint prettier eslint-plugin-prettier eslint-config-prettier
-D
1
2
3
2
3
.eslintrc.js
module.exports = {
root: true,
env: {
browser: true,
node: true,
es2022: true
},
parserOptions: {
sourceType: 'module',
ecmaVersion: 'latest', //默认script,允许es高级语法
ecmaFeatures: {
jsx: true, // 支持jsx写法
globalReturn: false, // 是否允许在全局作用域下使用 return 语句
impliedStrict: false, // 是否启用全局 strict 模式(严格模式)
experimentalObjectRestSpread: false // 是否启用对实验性的objectRest/spreadProperties的支持
}
},
extends: ['eslint:recommended', 'plugin:prettier/recommended' /* 放在最后 */],
plugins: [],
rules: {},
globals: {
defineProps: 'readonly'
}
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
prettierrc.js
module.exports = {
singleQuote: true,
jsxSingleQuote: true,
trailingComma: 'none',
arrowParens: 'avoid'
};
1
2
3
4
5
6
2
3
4
5
6
# ts 的最佳实践
pnpm i
typescript @typescript-eslint/parser @typescript-eslint/eslint-plugin
-D
1
2
3
2
3
.eslintrc.js
module.exports = {
root: true,
env: {
browser: true,
node: true,
es2022: true
},
+ parser: '@typescript-eslint/parser',
parserOptions: {
sourceType: 'module',
ecmaVersion: 'latest', //默认script,允许es高级语法
ecmaFeatures: {
jsx: true, // 支持jsx写法
// globalReturn: false, // 是否允许在全局作用域下使用 return 语句
// impliedStrict: false, // 是否启用全局 strict 模式(严格模式)
// experimentalObjectRestSpread: false // 是否启用对实验性的objectRest/spreadProperties的支持
}
},
extends: [
'eslint:recommended',
+ 'plugin:@typescript-eslint/recommended',
'plugin:prettier/recommended' /* 放在最后 */
],
+ plugins: ['@typescript-eslint'],
rules: {},
globals: {
defineProps: 'readonly'
}
};
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
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
tsconfig.json
{
"compilerOptions": {
"target": "esnext", // 指定编译后的js最低支持的语法
"module": "esnext",
"moduleResolution": "node", //使用node解析路径,可以识别/下面的index文件
"strict": true,
"jsx": "preserve",
"sourceMap": true,
"resolveJsonModule": true, //允许引用json文件
"esModuleInterop": true, //为导入内容创建命名空间,实现 CommonJS 和 ES 模块之间的互相访问
"skipLibCheck": true,
"allowJs": true, //否则volar会报错
"lib": ["esnext", "dom", "ES2018.Promise"],
// "types": ["vite/client"], // 可以使用vite内置语法,比如import.meta
"baseUrl": ".",
"paths": {
"@/*": ["src/*"],
"#/*": ["types/*"]
}
},
"include": [
"src/**/*.ts",
"src/**/*.tsx",
"src/**/*.d.ts",
"src/**/*.vue",
"vite.config.ts",
"types/**/*.d.ts",
"types/**/*.ts",
"mock/**/*.ts",
"build/**/*.ts",
"build/**/*.d.ts"
],
"exclude": ["node_modules", "dist"]
}
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
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
# 配置脚本
package.json
检查 src 和 scripts 目录下的 .js 与.vue 文件并自动修复
{
...
"scripts": {
"line": "eslint src scripts --ext .js,.vue",
"line:fix": "eslint src scripts --ext .js,.vue --fix"
},
}
1
2
3
4
5
6
7
2
3
4
5
6
7
注意
--ext 只有在参数为目录时,才生效。
如果你使用 glob 模式或文件名,--ext 将被忽略
例如,eslint lib/* --ext .js 将匹配 lib/ 下的所有文件,忽略扩展名。
# 忽略文件
.eslintignore
*.sh
node_modules
dist
*.md
*.woff
*.ttf
.vscode
.idea
/public
/docs
.husky
.local
/bin
Dockerfile
*.css
*.jpg
*.jpeg
*.png
*.gif
*.d.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
.eslintignore
node_modules
dist
1
2
2