当前位置: 首页 > news >正文

使用 ESLint + Prettier 美化代码

还没有来得及跟2018年说声再见,2019年的第一个工作周也结束了。原本打算在18年末就应该完成的React项目升级,因为种种原因,导致现在才开始。将React从15.4升级到16.7的过程掉进了不少坑,但是最头痛还是杂乱无章的代码。由于项目前期并没有使用 ESLint 等约束,因此导致代码风格是千姿百态,分号忽隐忽现、tab和空格、2个空格和4空格等。

为了快速解决这些代码风格差异,我选择使用 ESLint 和 Prettier。搭配 VS Code 编辑器的“保存自动修复”功能,可谓是美化代码的神器。

ESLint

ESLint 是一个开源的 JavaScript 代码检查工具,能让我们在开发的过程中及时发现问题,同时也提供了根据 ESLint 规则来格式化代码的CLI命令。因此我们在配置好规则后可以通过 --fix 命令自动修复代码风格。

eslint --fix *.js
复制代码

Prettier

Prettier 与 ESLint 不同,ESLint 主要的目的是代码检查。而 Prettier 是为了让代码风格“更漂亮”。Prettier 并不局限于 JavaScript 代码的格式化。还支持 TypeScript 、 Flow 、 CSS 、JSX 、 HTML 、 GraphQL 、 JSON等。

使用 Prettier 也很简单:

1、安装 Prettier

npm install --global prettier
复制代码

2、配置 Prettier

支持 .js|.json|.yaml|.yml 等后缀,具体配置信息可查阅官网

// prettier.config.js or .prettierrc.js
module.exports = {
  trailingComma: 'es5',
  singleQuote: true,
  printWidth: 200,
};

复制代码

3、格式化代码

通过 CLI 命令 prettier [opts] [filename ...] 来指定需要格式化的文件夹或是文件。具体参数请查阅官网

prettier --write [filename ...]
复制代码

如果需要与 ESLint 一起使用,只需使用 eslint-plugin-prettier 将 Prettier 添加为 ESLint 规则。

npm install --save-dev eslint-plugin-prettier
复制代码

.eslintrc.json:

{
  "plugins": ["prettier"],
  "rules": {
    "prettier/prettier": "error"
  }
}
复制代码

VS Code 配置

首先安装 ESLint 扩展,然后修改用户设置 首选项 -> 设置

关键配置如下:

"eslint.autoFixOnSave": true
复制代码

总结

虽然可以将 Prettier 添加为 ESLint 规则。但是两者搭配一起使用可能会存在冲突。由于 Prettier 的可配置项比 ESlint 少太多了,所以冲突发生时,往往是通过修改 ESLint 规则(eslint-config-prettier)来避免错误的出现,这点并不是我想要的。为了解决这个冲突问题,目前我的做法是:

1、先使用 Prettier 格式化整个项目

prettier --write [filename ...]
复制代码

2、使用 ESLint 的 --fix 命令来修复 Prettier 带来的冲突。

eslint --fix *.js
复制代码

如果大家有更好的做法或是建议,欢迎留言告诉我。

相关文章:

  • django进阶
  • 当安装、卸载件包时,出现依赖问题 error: Failed dependencies解决办法
  • vue.js实现单个页面操作之学习案例笔记
  • 盘点抖音源码中的广告变现方式
  • 搭建appium的android环境
  • six.moves的用法
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • Kotlin的LogUtil
  • DotNetNuke media module使用方法
  • 关于 typedef void * POINTER_64 PVOID64;问题
  • iOS动手做一个直播(代码篇)
  • videoJs实现点击按钮播放切换视频
  • [安卓] 8、VIEW和SURFACEVIEW游戏框架
  • JavaScript经典代码【二】【javascript判断用户点了鼠标左键还是右键】
  • iOS快速集成支付宝
  • 0x05 Python数据分析,Anaconda八斩刀
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • eclipse(luna)创建web工程
  • node.js
  • SQLServer插入数据
  • vue-loader 源码解析系列之 selector
  • 初识 webpack
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 区块链技术特点之去中心化特性
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 写给高年级小学生看的《Bash 指南》
  • 用element的upload组件实现多图片上传和压缩
  • 用jquery写贪吃蛇
  • 积累各种好的链接
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • $(function(){})与(function($){....})(jQuery)的区别
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (转)LINQ之路
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • .bat批处理(一):@echo off
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .Net 路由处理厉害了
  • .NET高级面试指南专题十一【 设计模式介绍,为什么要用设计模式】
  • .NET面试题(二)
  • .secret勒索病毒数据恢复|金蝶、用友、管家婆、OA、速达、ERP等软件数据库恢复
  • @hook扩展分析
  • @ModelAttribute 注解
  • [ 隧道技术 ] 反弹shell的集中常见方式(二)bash反弹shell
  • []新浪博客如何插入代码(其他博客应该也可以)
  • [2016.7.test1] T2 偷天换日 [codevs 1163 访问艺术馆(类似)]
  • [20161214]如何确定dbid.txt
  • [APIO2012] 派遣 dispatching
  • [bzoj 3534][Sdoi2014] 重建
  • [C++]打开新世界的大门之C++入门