| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> JavaScript知识库 -> vue3 +vite+ts实战项目添加 eslint + prettier + lint-staged 踩坑指南 -> 正文阅读 |
|
[JavaScript知识库]vue3 +vite+ts实战项目添加 eslint + prettier + lint-staged 踩坑指南 |
初始化项目
这个模板是没有使用配置 集成eslint首先我们安装
接下来初始化
依次选择这些选项:
到这一步,我们就已经安装了相关的依赖了,并且得到一个已配置好的
然后我们为
一切进行得非常顺利,然而当我们运行lint命令时,会发现不是我们想要的结果: 命令行在解析 这一步本来是在我们继承 但是我们后续又 而我们在配置文件中的extends顺序是:
所以
两个 接下来我们继续运行
我们知道,这两个特性都是vue3引入的,问题可能出在我们的配置不支持vue3项目,翻阅 没有
然后再运行, 因为defineProps是一个全局的预编译宏, 我们只需要在env中开启这个环境变量即可:
然后我们再运行 添加vscode-eslint 插件就目前而言,我们能在命令行中使用eslint了,然而写一行代码就去运行下检测脚本实在太麻烦,好在我们可以结合 在
这样一来,当你按下 安装依赖说明
集成 prettier相比
然后再项目根目录添加一份配置文件
这是我的配置文件,如果需要更多的配置方法,可以参考官方的配置文档。 然后再package.json中添加一个脚本
当运行这个命令时,就会将我们项目中的文件都格式化一次。 一般而言,我们还需要集成
这样一来,当我们在vscode写代码的时候,便会自动格式化了。 解决 eslint 和 prettier 的冲突理想状态下,到这一步我们写代码的时候, 这是因为
然后在
然后我们重启一下vscode,就会发现冲突消失了,我们的自动修复和自动格式化也能相互协作了。 配置 husky + lint-staged理论上,到上一步我们已经能使得我们的项目获得不错的开发规范约束了。然而仍然有可以改进的地方:
基于上述的顾虑,社区提供了 首先安装依赖
添加一个在
接下来我们为我们git仓库添加一个
这回在我们的.husky目录下生成一个
接下来我们配置
这样之后,我们后续提交到暂存区的代码也就会被 配置 husky + lint-staged 后带来了新的
|
Windows | Linux/Mac | Old Mac(pre-OSX |
---|---|---|
CRLF | LF | CR |
‘\n\r’ | ‘\n’ | ‘\r’ |
因此,文本文件在不同系统下创建和使用时就会出现不兼容的问题。
我的项目仓库中默认是Linux
环境下提交的代码,文件默认是以LF
结尾的(工程化需要,统一标准)。
当我用windows
电脑git clone
代码的时候,若我的autocrlf
(在windows
下安装git
,该选项默认为true
)为true
,那么文件每行会被自动转成以CRLF
结尾,若对文件不做任何修改,pre-commit
执行eslint
的时候就会提示你删除CR
。
现在可以理解ctrl+s
和yarn run lint --fix
方案为何可以修复eslint
错误了吧,因为Git
自动将CRLF
转换成了LF
。
最佳实践:
现在VScode
,Notepad++
编辑器都能够自动识别文件的换行符是LF
还是CRLF
。 如果你用的是windows
,文件编码是UTF-8
且包含中文,最好全局将autocrlf
设置为false
。
git config --global core.autocrlf false
注意:git
全局配置之后,你需要重新拉取代码。
由于我们组内全部使用的windows,所有直接配置.prettierrc
endOfLine: 'crlf', // Windows
// package.json
{
"name": "my-vue-app",
"version": "0.0.0",
"scripts": {
"dev": "vite",
"build": "vue-tsc --noEmit && vite build",
"preview": "vite preview",
"lint": "eslint . --ext .vue,.js,.ts,.jsx,.tsx --fix",
"format": "prettier --write ./**/*.{vue,ts,tsx,js,jsx,css,less,scss,json,md}",
"prepare": "husky install"
},
"dependencies": {
"vue": "^3.2.25"
},
"devDependencies": {
"@types/node": "^16.3.1",
"@typescript-eslint/eslint-plugin": "^5.22.0",
"@typescript-eslint/parser": "^5.22.0",
"@vitejs/plugin-vue": "^1.2.4",
"@vitejs/plugin-vue-jsx": "^1.1.6",
"@vue/compiler-sfc": "^3.0.5",
"eslint": "^8.15.0",
"eslint-config-prettier": "^8.5.0",
"eslint-config-standard": "^17.0.0",
"eslint-plugin-prettier": "^4.0.0",
"eslint-plugin-vue": "^8.7.1",
"husky": "^8.0.1",
"lint-staged": "^12.4.1",
"prettier": "^2.6.2",
"typescript": "^4.3.2",
"vite": "^2.8.6",
"vue-tsc": "^0.33.9"
}
"devDependencies": {
"@typescript-eslint/eslint-plugin": "^5.7.0",
"@typescript-eslint/parser": "^5.7.0",
"@vitejs/plugin-vue": "^2.0.0",
"eslint": "^8.4.1",
"eslint-config-prettier": "^8.3.0",
"eslint-plugin-prettier": "^4.0.0",
"eslint-plugin-vue": "^8.2.0",
"husky": "^7.0.4",
"lint-staged": "^12.1.3",
"prettier": "^2.5.1",
"typescript": "^4.4.4",
"vite": "^2.7.2",
"vue-tsc": "^0.29.8"
},
"lint-staged": {
"*.{js,vue,ts,jsx,tsx}": [
"prettier --write",
"eslint --fix"
],
"*.{html,css,less,scss,md}": [
"prettier --write"
]
}
}
// .eslintrc.js
module.exports = {
// 设置我们的运行环境为浏览器 + es2021 + node ,否则eslint在遇到 Promise,window等全局对象时会报错
env: {
browser: true,
es2021: true,
node: true,
// 开启setup语法糖环境
'vue/setup-compiler-macros': true,
},
// 继承eslint推荐的规则集,vue基本的规则集,typescript的规则集
extends: [
'plugin:vue/vue3-recommended',
'plugin:@typescript-eslint/recommended',
'standard', // 格式化规范
'plugin:prettier/recommended', // 新增,必须放在最后面,prettier规则覆盖与eslint冲突的规则
'prettier', // 避免vue 与 prettier冲突
'eslint:recommended',
],
// 定义ESLint的解析器
parser: 'vue-eslint-parser',
// 支持ts的最新语法
parserOptions: {
ecmaVersion: 'latest',
parser: '@typescript-eslint/parser',
sourceType: 'module',
},
// 添加vue和@typescript-eslint插件,增强eslint的能力
plugins: ['vue', '@typescript-eslint', 'prettier'],
rules: {
// "off"或者0 //关闭规则关闭
// "warn"或者1 //在打开的规则作为警告(不影响退出代码)
// "error"或者2 //把规则作为一个错误(退出代码触发时为1)
'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
// 解析vue模板错误规则
'vue/no-parsing-error': [
2,
{
'x-invalid-end-tag': false,
'missing-semicolon-after-character-reference': false,
},
],
'no-unused-expressions': ['error', { allowShortCircuit: true, allowTernary: true }], // 允许使用短路、三目
'no-param-reassign': ['error', { props: false }], // 函数形参可修改
'vue/multi-word-component-names': 'off', // eslint-plugin-vue @8版本中新增了不少的规则,第一条就是 **‘vue/multi-word-component-names’: ‘error’,**所有index.vue 会报错,解决方法:
'no-new-object': 'off', // 关闭不可以new对象的规则
'no-explicit-any': 'off', // 可以使用any,但请尽量不使用any
'@typescript-eslint/no-explicit-any': 'off', // ts可以使用any
'vue/v-on-event-hyphenation': 'off', // 关闭事件命名样式需要用连字符
},
};
// .prettierrc.js
/**
tips:
endOfLine: 'crlf' 因为eslint和prettier就这个问题上不一致互相冲突,我们这里统一使用Windows系统的.
如果是有mac使用需求的请使用git config --global core.autocrlf false解决
*/
module.exports = {
printWidth: 100, //单行长度
tabWidth: 2, //缩进长度
useTabs: false, //使用空格代替tab缩进
semi: true, //句末使用分号
singleQuote: true, //使用单引号
endOfLine: 'crlf', // Windows
};
// .vscode/settings.json
{
"editor.formatOnSave": true,
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.codeActionsOnSave": {
"source.fixAll": true
}
}
// .husky/pre-commit
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
npx --no-install lint-staged
参考:
幕小白 项目中 Prettier + Stylelint + ESlint 配置
eslint-plugin-vue
羽徵 — Delete ?
eslint(prettier/prettier) 错误的解决方案
羽墨 项目中 Prettier + Stylelint + ESlint 配置
Eslint与Prettier冲突解决,及eslint 问题记录
感谢各位开源作者
|
JavaScript知识库 最新文章 |
ES6的相关知识点 |
react 函数式组件 & react其他一些总结 |
Vue基础超详细 |
前端JS也可以连点成线(Vue中运用 AntVG6) |
Vue事件处理的基本使用 |
Vue后台项目的记录 (一) |
前后端分离vue跨域,devServer配置proxy代理 |
TypeScript |
初识vuex |
vue项目安装包指令收集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 19:56:22- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |