Skip to content

Commit

Permalink
Second proofread
Browse files Browse the repository at this point in the history
  • Loading branch information
H2O-2 authored and H2O-2 committed Aug 16, 2017
1 parent 7838f77 commit 8afb68f
Showing 1 changed file with 11 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
> * 译文出自:[掘金翻译计划](https://github.com/xitu/gold-miner)
> * 本文永久链接:[https://github.com/xitu/gold-miner/blob/master/TODO/how-writing-custom-babel-and-eslint-plugins-can-increase-your-productivity-and-improve-user.md](https://github.com/xitu/gold-miner/blob/master/TODO/how-writing-custom-babel-and-eslint-plugins-can-increase-your-productivity-and-improve-user.md)
> * 译者:[H2O2](https://github.com/H2O-2)
> * 校对者:[MJingv](https://github.com/MJingv)
> * 校对者:[MJingv](https://github.com/MJingv)[zyziyun](https://github.com/zyziyun)
# 自定义 Babel 和 ESLint 插件是如何提高生产率与用户体验的

Expand All @@ -20,11 +20,11 @@

**我的[前端大师课程 「程序变换(code transformation)与抽象语法树(AST)」](https://frontendmasters.com/courses/linting-asts/)已经发布了🎉 🎊(进入网址查看课程的简介)!我觉得你们应该都有兴趣了解为什么要花上 3 小时 42 分钟来学习编写 Babel 和 ESLint 插件**

构建应用程序是件困难的事,并且难度会随着团队和代码库的扩张而增大。幸运的是,我们有诸如 [ESLint](http://eslint.org/)[Babel](https://babeljs.io/) 这样的工具来帮助我们处理这些逐渐成长的代码库,防止 bug 的产生并迁移代码,从而让我们可以把注意力集中在应用程序的特定领域
构建应用程序是件困难的事,并且难度会随着团队和代码库的扩张而增大。幸运的是,我们有诸如 [ESLint](http://eslint.org/)[Babel](https://babeljs.io/) 这样的工具来帮助我们处理这些逐渐成长的代码库,防止 bug 的产生并迁移代码,从而让我们可以把注意力集中在应用程序的特定领域上

ESLint 和 Babel 都有活跃的插件社区 (如今 [「ESLint plugin」](https://www.npmjs.com/search?q=eslint%20plugin&page=1&ranking=optimal) 可以搜索出 857 个包,[「Babel Plugin」](https://www.npmjs.com/search?q=babel%20plugin) 则可以搜索出 1781 个包)。正确应用这些插件可以提升你的开发体验并提高代码库的代码质量。
ESLint 和 Babel 都有活跃的插件社区 (如今在 npm 上 [「ESLint plugin」](https://www.npmjs.com/search?q=eslint%20plugin&page=1&ranking=optimal) 可以搜索出 857 个包,[「Babel Plugin」](https://www.npmjs.com/search?q=babel%20plugin) 则可以搜索出 1781 个包)。正确应用这些插件可以提升你的开发体验并提高代码库的代码质量。

尽管 Babel 和 ESLint 都拥有很棒的社区,你往往会遇到全世界都没遇到过的问题,因此你需要的特定用途的插件也往往不存在。另外,有时候重构代码库时,一个自定义的 babel 插件比查找/替换正则要有效得多。
尽管 Babel 和 ESLint 都拥有很棒的社区,你往往会遇到其他人都没遇到过的问题,因此你需要的特定用途的插件也可能不存在。另外,在大型项目的代码重构过程时,一个自定义的 babel 插件比查找/替换正则要有效得多。

> **你可以编写自定义 ESLint 和 Babel 插件来满足特定需求**
Expand All @@ -34,11 +34,11 @@ ESLint 和 Babel 都有活跃的插件社区 (如今 [「ESLint plugin」](https

ESLint logo

修复一个 bug 之后,你应该确保它不再出现。与其通过 [测试驱动开发(test driven development)](https://egghead.io/lessons/javascript-use-test-driven-development)达到这个目的,先问问自己:「这个 bug 是不是可以通过使用一个类型系统(如 [Flow](https://flow.org/))来避免?」 如果答案是否定的,再问自己「这个 bug 是不是可以通过使用 [自定义 ESLint 插件](http://eslint.org/docs/developer-guide/working-with-rules)来避免?」 这两个工具的好处是可以**静态**分析你的代码。
你应该确保修复过的 bug 不再出现。与其通过 [测试驱动开发(test driven development)](https://egghead.io/lessons/javascript-use-test-driven-development)达到这个目的,先问问自己:「这个 bug 是不是可以通过使用一个类型检查系统(如 [Flow](https://flow.org/))来避免?」 如果答案是否定的,再问自己「这个 bug 是不是可以通过使用 [自定义 ESLint 插件](http://eslint.org/docs/developer-guide/working-with-rules)来避免?」 这两个工具的好处是可以**静态**分析你的代码。

> 通过 ESLint 你 **不需要运行任何一部分代码**即可断定是否有问题。
除了上面所说的之外,一旦你添加了一个 ESLint 插件问题不仅在代码库的特定位置得到了解决,**该问题在任何一个位置都不会出现了**这是件大好事!(而且这是测试无法做到的)。
除了上面所说的之外,一旦你添加了一个 ESLint 插件,问题不仅在代码库的特定位置得到了解决,**该问题在任何一个位置都不会出现了**这是件大好事!(而且这是测试无法做到的)。

下面是我在 PayPal 的团队使用的一些自定义规则,以防止我们发布曾经出现过的 bug。

Expand All @@ -50,7 +50,7 @@ ESLint logo

我们还有更多的规则,但总的来说规则并不多。很赞的一点是,因为我们花了时间去[学习并编写自定义 ESLint 插件](http://kcd.im/fm-asts), 这些 bug 都没有再次出现。

注意:如果某个 bug 无法通过 Flow 或 ESLint 避免,那可能是业务逻辑出了什么问题,你可以回归使用测试来避免此类情况发生[学习如何测试 JavaScript 项目](http://kcd.im/fm-testing))。
注意:如果某个 bug 无法通过 Flow 或 ESLint 避免,那可能是业务逻辑出了什么问题,你可以回到通过测试的方式来避免此类情况发生[学习如何测试 JavaScript 项目](http://kcd.im/fm-testing))。

### 应在什么时候写自定义的 Babel 插件

Expand Down Expand Up @@ -85,15 +85,15 @@ Babel logo
astexplorer.net 上一个名为「你也许不需要 jQuery」的 babel 插件演示。打开链接:[http://kcd.im/asteymnnj](http://kcd.im/asteymnnj)
Babel 和 ESLint 都以一个名为抽象语法树(Abstract Syntax Tree,常缩写为 AST)的结构为基础运行。实际上这就是计算机如何读取代码的。Babel 有一个 [名为「babylon」的 JavaScript 语法分析器](https://github.com/babel/babylon),可以把代码字符串变成一个 AST(其实就是一个 JavaScript 对象),然后 Babel 把一些片段提供给 babel 插件来让你操作。如果是 Babel 则你可以做一些变形,如果是 ESLint 则你可以检查你不希望出现的规则。

我没用计算机科学的文凭。我一年前才开始学习 AST。
我没有计算机科学的文凭。我一年前才开始学习 AST。

> 和 AST 打交道帮助我更深刻地理解了 JavaScript。
### 尝试一下

**我保证,这远没有你想象的困难 😱。**你可以学好的。我会给你一步步地解释。而且这门课还有很多非常好的联系帮助你进步。学习如何编写自定义的 ESlint 和 Babel 插件会对你的软件开发之路有帮助,并且会让你的应用变得更好 👍。
**我保证,这远没有你想象的困难😱**你可以学好的。我会给你一步步地解释。而且这门课还有很多非常好的练习帮助你进步。学习如何编写自定义的 ESlint 和 Babel 插件会对你的软件开发之路有帮助,并且会让你的应用变得更好 👍。

[学习程序变换以及使用抽象语法树进行 lint](http://kcd.im/fm-asts) (校对完成后删除:这里原文是一个链接,下面的 *Learn Abstract Syntax Trees to help keep track of stylistic code changes, reveal logical problems, and spot domain…* 是部分介绍,我就不翻译了,只留标题)
[学习程序变换以及使用抽象语法树进行 lint](http://kcd.im/fm-asts)

### 分享一下吧

Expand All @@ -113,7 +113,7 @@ P.S. 还有一些其他(免费)的资源可以帮助你学习 AST。
- [使用 AST 编写自定义 Babel 和 ESLint 插件](https://www.youtube.com/watch?v=VBscbcm2Mok&index=1&list=PLV5CVI1eNcJgNqzNwcs4UKrlJdhfDjshf&t=192s)
- [Egghead.io 上一些有关 AST 的课程](http://kcd.im/egghead-asts)

P.S.P.S 我觉得我应该提一下我最近写的两个 babel 插件,它们让我感到很兴奋([I’m](https://twitter.com/threepointone/status/885884698093899777)[not](https://twitter.com/mitchellhamiltn/status/886441807420182528)[alone](https://twitter.com/rauchg/status/886449097770541057)[either](https://twitter.com/souporserious/status/886803870743121920))(校对完成后删除:这里作者在各种搞笑。。。我就不翻译了= =)我觉得你们应该看看这些插件。这两个插件的最初版本我都只写了半个小时:
P.S.P.S 我觉得我应该提一下我最近写的两个 babel 插件,它们让我感到很兴奋([I’m](https://twitter.com/threepointone/status/885884698093899777) [not](https://twitter.com/mitchellhamiltn/status/886441807420182528) [alone](https://twitter.com/rauchg/status/886449097770541057) [either](https://twitter.com/souporserious/status/886803870743121920))我觉得你们应该看看这些插件。这两个插件的最初版本我都只写了半个小时:

- [babel-plugin-preval](https://github.com/kentcdodds/babel-plugin-preval): 在编译时预分析代码
- [babel-macros](https://github.com/kentcdodds/babel-macros): 使 babel 插件无需配置即可直接导入
Expand Down

0 comments on commit 8afb68f

Please sign in to comment.