ESLint 与 Prettier使用
如何设置 Prettier?
在你的文件夹中,在命令行中敲入,创建一个 package.json 文件:
npm init -y
安装我们的第一个依赖项:
npm add --dev prettier
npm i -D eslint-plugin-prettier
eslint-plugin-prettier插件会调用prettier对你的代码风格进行检查,其原理是先使用prettier对你的代码进行格式化,然后与格式化之前的代码进行对比,如果过出现了不一致,这个地方就会被prettier进行标记
现在在根文件夹中创建一个 prettier.config.js 文件,并在其中添加一些 Prettier 规则:
module.exports = {"printWidth": 100, //一行的字符数,如果超过会进行换行,默认为80"singleQuote": true,"jsxBracketSameLine": false,"tabWidth": 2, //一个tab代表几个空格数"useTabs": false, //是否使用tab进行缩进,默认为false,表示用空格进行缩减"singleQuote": false, //字符串是否使用单引号,默认为false,使用双引号"semi": true, //行位是否使用分号,默认为true"trailingComma": "none", //是否使用尾逗号,有三个可选值"<none|es5|all>""bracketSpacing": true, //对象大括号直接是否有空格,默认为true,效果:{ foo: bar }"parser": "babylon" //代码的解析引擎,默认为babylon,与babel相同。
};
printWidth 将确保你的单行代码不会超过 100 个字符。
singleQuote 会将所有双引号转换为单引号。
trailingComma 将确保在最后一个对象属性的末尾会有一个逗号。
bracketSpacing 在对象字面量之间打印空格:
If bracketSpacing is true - Example: { foo: bar }
If bracketSpacing is false - Example: {foo: bar}
jsxBracketSameLine 将在多行 JSX 元素的最后一行放置>:
// true example
<buttonclassName="prettier-class"id="prettier-id"onClick={this.handleClick}>Click Here
</button>// false example
<buttonclassName="prettier-class"id="prettier-id"onClick={this.handleClick}
>Click Here
</button>
tabWidth 指定单个缩进的空格数。
如果 semi 设置为 true,将在语句末尾加上 ; 。
现在让我们来说说这个脚本的作用:
“prettier”: “prettier — write src/**/*.js”
它的意思是运行 prettier,并让它在 src/ 文件夹中查找所有的.js 文件。--write 标志告诉 prettier 要把格式化好的内容保存到文件中,并找出格式化过程中发现的任何异常。
现在在终端中运行这个脚本:
npm prettier
如何设置 ESLint?
介绍一些相关的:
eslint-config-airbnb:这个包提供了所有 Airbnb 的 ESLint 配置,你可以修改它们。
eslint-plugin-babel:babel-eslint 的插件伴侣。
eslint-plugin-import:这个插件旨在支持 ES2015+(ES6+)的导入 / 导出语法,并防止出现拼写错误的文件路径和导入名称。
eslint-plugin-jsx-a11y:适用于 JSX 元素可访问性规则的 linting 规则。
eslint-plugin-prettier:让 ESLint 与 Prettier 的使用更顺畅。
eslint-plugin-react:特定于 React 的 linting 规则。
eslint-config-jest-enzyme:用于特定于 React 和 Enzyme 的全局变量。这个 lint 配置让 ESLint 知道有哪些全局变量,并且不会针对它们发出警告——有点像断言 it 和 describe。
eslint-plugin-jest:Jest 的 ESLint 插件。
同上,安装eslint:
在根目录创建.eslintrc.js 文件:
module.exports = {env: {es6: true,browser: true,node: true,},extends: ['airbnb', 'plugin:jest/recommended', 'jest-enzyme'],plugins: ['babel','import','jsx-a11y','react','prettier',],parser: 'babel-eslint',parserOptions: {ecmaVersion: 6,sourceType: 'module',ecmaFeatures: {jsx: true}},rules: {'linebreak-style': 'off', // Don't play nicely with Windows.'arrow-parens': 'off', // Incompatible with prettier'object-curly-newline': 'off', // Incompatible with prettier'no-mixed-operators': 'off', // Incompatible with prettier'arrow-body-style': 'off', // Not our taste?'function-paren-newline': 'off', // Incompatible with prettier'no-plusplus': 'off','space-before-function-paren': 0, // Incompatible with prettier'max-len': ['error', 100, 2, { ignoreUrls: true, }], // airbnb is allowing some edge cases'no-console': 'error', // airbnb is using warn'no-alert': 'error', // airbnb is using warn'no-param-reassign': 'off', // Not our taste?"radix": "off", // parseInt, parseFloat radix turned off. Not my taste.'react/require-default-props': 'off', // airbnb use error'react/forbid-prop-types': 'off', // airbnb use error'react/jsx-filename-extension': ['error', { extensions: ['.js'] }], // airbnb is using .jsx'prefer-destructuring': 'off','react/no-find-dom-node': 'off', // I don't know'react/no-did-mount-set-state': 'off','react/no-unused-prop-types': 'off', // Is still buggy'react/jsx-one-expression-per-line': 'off',"jsx-a11y/anchor-is-valid": ["error", { "components": ["Link"], "specialLink": ["to"] }],"jsx-a11y/label-has-for": [2, {"required": {"every": ["id"]}}], // for nested label htmlFor error'prettier/prettier': ['error'],},
};
'prettier/prettier': ['error'] 表示被prettier标记的地方抛出错误信息。
还要在根目录中添加.eslintignore 文件:
/.git
/.vscode
node_modules
我们先介绍一下.eslintrc.js 文件的作用。
先把它拆分一下:
module.exports = { env:{}, extends: {}, plugin: {}, parser: {}, parserOptions: {}, rules: {},
};
1. env:用于预定义全局变量。在我们的例子中,可用的环境包括 es6、browser 和 es6。es6 将启用除模块之外的所有 ECMAScript 6 功能。browser 将添加所有浏览器全局变量,如 Windows。node 将添加 Node 全局变量和 Node 作用域,比如 global。
2. extends:字符串数组——扩展了之面配置的额外配置选项。现在我们正在使用 airbnb 的 linting 规则,这些规则被扩展到 jest,然后是 jest-enzyme。
3. plugins:插件基本上就是我们想要使用的 linting 规则。现在我们正在使用 babel、import、jsx-a11y、react、prettier。
4. parser:默认情况下,ESLint 使用 Espree,但因为我们使用了 babel,我们还需要使用 Babel-ESLint。
5. parserOptions:如果我们将 Espree 的默认解析器更改为 babel-eslint,需要指定 parserOptions——它是必需的。我通过选项告诉 ESLint,ecmaVersion 是 6。因为我们在 EcmaScript 模块(而不是 script)中编写代码,所以我们将 sourceType 指定为 module。由于我们使用了 React,引入了 JSX,所以在 ecmaFeatures 中加了 jsx 选项,并将其设置为 true。
6. rules:我们已经扩展并通过插件添加的所有规则,我们可以更改或覆盖它们。
介绍一下.eslintignore
.eslintignore 里包含了我们不希望 ESLint 对它们进行 lint 的路径列表。这里我只指定三个:
1. /.git——我不希望 Git 相关文件被 lint。
2. /.vscode——由于我使用的是 VS Code,这个编辑器提供了自己的配置文件,我不希望配置文件被 lint。
3. node_modules——我不希望依赖项被 lint,所以把这个目录也添加到列表中。
在vue中使用
借助ESLint的autofix功能,在保存代码的时候,自动将抛出error的地方进行fix。因为我们项目是在webpack中引入eslint-loader来启动eslint的,所以我们只要稍微修改webpack的配置,就能在启动webpack-dev-server的时候,每次保存代码同时自动对代码进行格式化。
const path = require('path')
module.exports = {module: {rules: [{test: /\.(js|vue)$/,loader: 'eslint-loader',enforce: 'pre',include: [path.join(__dirname, 'src')],options: {fix: true}}]
}
如果你的eslint是直接通过cli方式启动的,那么只需要在后面加上fix即可,如:eslint --fix
。
如果与已存在的插件冲突怎么办
npm i -D eslint-config-prettier
通过使用eslint-config-prettier配置,能够关闭一些不必要的或者是与prettier冲突的lint选项。这样我们就不会看到一些error同时出现两次。使用的时候需要确保,这个配置在extends的最后一项。
//.eslintrc.js
{extends: ['standard', //使用standard做代码规范"prettier",],
}
这里有个文档,列出了会与prettier冲突的配置项。
同时使用上面两项配置
如果你同时使用了上述的两种配置,那么你可以通过如下方式,简化你的配置。
//.eslintrc.js
{"extends": ["plugin:prettier/recommended"]
}
这个是在vue-cli生成的代码基础上修改的,并且使用standard做代码规范:
module.exports = {root: true,parserOptions: {parser: 'babel-eslint'},env: {browser: true,es6: true},extends: [// https://github.com/standard/standard/blob/master/docs/RULES-en.md'standard',// https://github.com/vuejs/eslint-plugin-vue#priority-a-essential-error-prevention// consider switching to `plugin:vue/strongly-recommended` or `plugin:vue/recommended` for stricter rules.'plugin:vue/essential',"plugin:prettier/recommended",],// required to lint *.vue filesplugins: ['vue'],// add your custom rules hererules: {"prettier/prettier": "error",// allow async-await'generator-star-spacing': 'off',// allow debugger during development'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off'}
}
在VScode中使用
我们设置好了 prettier 和 eslint,但每次我们都要运行脚本。接下来我们让它更加自动化一些。
1. 在编辑器中按下 ctrl + s 时格式化和 lint 代码。
2. 每次提交代码时,自动对代码进行 lint 和格式化。
3. 要在保存代码时进行格式化和 lint,需要使用像 VS Code 这样的编辑器:
安装 ESLint 扩展插件。在此(https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint)下载插件或在 VS Code 编辑器中按下 ctrl + shift + x 打开扩展模块,搜索 eslint,将出现一系列插件。安装 Dirk Baeumer 开发的那个。安装完成后,点击 reload 按钮重新启动编辑器。
安装好这个插件后,在 app/ 根文件夹中创建一个名为.vscode/ 的文件夹 ——不要忘了那个点号,这个非常重要。
在文件夹中创建一个 settings.json 文件,如下所示:
{"editor.formatOnSave": false,"eslint.autoFixOnSave": true,
}
editor.formatOnSave——我在这里将它设置为 false,因为我不希望文件格式的默认编辑器配置与 ESLint 和 Prettier 发生冲突。
eslint.autoFixOnSave——我在这里将它设置为 true,因为我希望每次在保存文件时安装的插件都能正常工作。由于 ESLint 的配置关联了 Prettier 的配置,所以每次在点击保存时,它都会格式化和 lint 你的代码。
英文原文
ESLint 与 Prettier使用相关推荐
- 更新版-梳理前端开发使用eslint和prettier来检查和格式化代码问题
更新版,之前的版本可以看这里:梳理前端开发使用eslint和prettier来检查和格式化代码问题 一.问题痛点 在团队的项目开发过程中,代码维护所占的时间比重往往大于新功能的开发.因此编写符合团队编 ...
- eslint 保存自动格式化_代码规范之理解ESLint、Prettier、EditorConfig
授权转载自:nowThen https://juejin.cn/post/6895889063111294990 前言 团队多人协同开发项目中困恼团队管理一个很大的问题是:无可避免地会出现每个开发者编 ...
- vue项目接入eslint、prettier、husky+lint-staged
引言 在vue-cli官方的脚手架创建项目时,会自动让选择Eslint+Prettier,如果是老项目想接入,那么按照下面步骤接入即可 eslint安装 npm i -D eslint eslint- ...
- ESLint 和 Prettier 配合使用
CSDN 中文章不一定能及时更新,欢迎点击前往我的博客查看最新版本:许盛的博客 ESLint 是一款 Lint 工具,包含了代码质量检查等等. 而 Prettier 仅仅只是一个代码风格的约束工具,对 ...
- 在vscode里配置ESLint和Prettier
在vscode里配置ESLint和Prettier 文章目录 在vscode里配置ESLint和Prettier vscode插件和npm包区别 解决ESLint和Prettier冲突 vscode环 ...
- 前端代码规范工具ESLint和Prettier
前端代码规范工具ESLint和Prettier 1. ESLint是什么? ESLint 是一个开源的 JavaScript 代码检查工具,由 Nicholas C. Zakas 于2013年6月创建 ...
- 安装lint-staged 报错:Cannot add lint-staged: only eslint, stylelint, prettier...
错误背景: 在使用 prettier 格式化插件,我们希望提交代码时,借助 prettier 可以自动格式化所以需要安装: $ npx mrm lint-staged 不过安装过程中出现了错误 Can ...
- 【总结】1265- 理解 ESLint、Prettier、EditorConfig 代码规范
前言 团队多人协同开发项目中困恼团队管理一个很大的问题是:无可避免地会出现每个开发者编码习惯不同.代码风格迥异,为了代码高可用.可维护性, 如何从项目管理上尽量统一和规范代码呢? [x] 文档约定 - ...
- React 创建项目流程+配置 eslint、 prettier 和 commitlint 规范工程
一. 利用create-react-app创建TS项目 React中文文档 :开始 – React npx create-react-app projectName --template typesc ...
- eslint 搭配 prettier 格式化 + husky 搭配 lint-staged 实现提交格式化和检测
eslint 搭配 prettier 格式化 + husky 搭配 lint-staged 实现提交格式化和检测 注:本文基本是写给自己看的, 属于一个记录笔记, 避免每次配置都要查, 写得不清晰, ...
最新文章
- 【博士论文】机器学习中的标记增强理论与应用研究
- 如何评价算法的好坏?
- 今天用GRID感觉它严重缺少灵活性
- Axure--Web原型开发工具
- 优秀网页设计:带给你灵感的联系页面设计
- JAVA敏捷开发环境搭建
- 无线通信信道的衰落特性(大尺度衰落和小尺度衰落)
- React中PureComponent原理
- 印花导带容易出现的问题及其解决方法
- HDU 5980 2016ICPC大连 J: Find Small A
- 两个平面的位置关系和判定方程组解_高中必修二数学知识点
- 2015年阿里巴巴1688.com实名供应商数据84万
- 中交一公局二公司全面推进章管家 印章智慧管理转型在即
- 微信获取access_token 返回-1000
- css-图片旋转木马3D效果
- 惠普omen测试软件,性能测试:高品质体验主流游戏
- c语言rewind函数作用,C 文件 rewind() 函数
- android开发中对图片的处理方式汇总
- The page has expired due to inactivity.Please refresh and try again.
- 在pb中实现声音文件的播放
热门文章
- php导入word文件怎么打开,phpword 导入word
- 使用VMware启动centos6.6并使用Qume+kvm虚拟化linux和windows虚机
- 谷歌浏览器反复提示PageOffice安装
- 网站被劫持,打开一个网站会跳到另一个怎么办,直接输入网址也是这样。怎么办呢?
- #NI卸载修复工具,可以解决安装过程中出现“应用程序的安装程序可能已损坏”的问题。
- 计算机二级相关快捷键,计算机二级考试Word+Excel必备快捷键!
- Lua 实现复数计算器
- 华纳云:香港服务器哪家比较好?
- JVM(4)-MAT: 支配树 Dominator Tree
- 苹果电脑上装Windows7