当我第一次被分配到“修正执行ng lint语句后的错误”这项任务前,我就被导师提前告知这是一个很无聊的任务,当我开始后,我发现其实有一些办法可以加快这个无聊单调的工作。接下来,我就分享一下我的经验。

首先还是要来讲一讲 ng lint 的相关知识:

  1. 通过Angular CLI的执行语句 ng new XXX 创建新项目后,目录中会包含一个tslint.json文件,这个文件就是用来定义一个统一的代码风格。
  2. 有一些错误可以通过 ng lint -fix 自动解决,这个过程也许比较漫长。能自动修复的错误包括:missing whitespace, Missing semicolon, " should be ', misplaced 'else', file should end with a newline, trailing whitespace, Unnecessary semicolon, Identifier 'XXX' is never reassigned 等。

但是再次执行 ng lint 后仍然还有很多错误没有被修正,这时候我们就得手动消灭错误

如果你有很多错误的话,你会发现检测出的错误会使你眼花缭乱,因为也许是好几百条甚至上千条的信息以文件名及行的顺序列出,一个错误一行,有完整的错误所在位置[行,列],但是没有根据相同错误归类,而我认为,按错误种类一一解决是最有效率的方式了。

我的诀窍就是利用Word或Pages等文档软件进行错误信息的简化(也可顺便通过编号得知错误个数让自己心中有数),然后再利用Excel筛选出同类错误,从最容易修改的错误着手。另外,我使用的代码文件编辑器是Sublime Text 3,下面也会涉及到这个软件的某些功能的使用,故在此说明一下。

具体流程

1. 错误信息的简化

把所有的错误信息复制到文档中,换成清晰的字体格式,然后可以删除没必要的重复路径的信息,可以利用查找替换的功能将所有路径重复的前面部分用空格或无替换就能删掉这些令人眼花的信息。然后可以选中所有后点数字列表模式,最后一行的数字当然就是错误总数啦。

2. 将信息存储在Excel智能表格中

将文档中所有信息复制到Excel中,因为在Excel中转行就会使信息保存到下一行,所以这些信息就自然而然的被分到了一个N*1的表格中了,趁着复制的内容还是全选状态时点击表格模式(Format as Table),这是这些信息就在一个智能的表格中了。你还能选择表格的风格,有一些好看的模版可以直接使用,选择自己喜欢的颜色也有利于心情愉悦。

3. 筛选出同类错误

接下来就可以扫一眼有什么错误是你觉得能简单消灭的,然后点击表格自动生成的header右侧的小箭头,然后在跳出来的窗口中的search中输入自己想要解决的错误。

4. 我的解决顺序以及每个错误涉及到的原理和解决方法

1)== should be ===,!= should be !==

这一点确保了辨别相同时等号两边的类型必须相同。比如 '2' == 2 的结果是true, '2' === 2 的结果就是false了。所以写代码时要养成用===来写判别的习惯,如果真的有左侧是string的数字,右侧是number的数字,则可以用 +'2' === 2 或者 Number('2') === 2 的形式书写。当然,如果你已经确定左侧的变量与右侧你想用于比较的值是同一种类型的话,就不需要类型的转换了。!=与!==涉及到的概念一致。有一个快速解决此类问题的诀窍:通过右击选中项目app文件夹选择在该文件中查找,然后输入  ==  (记得左右两边的空格),然后就可以快速查看每一处是否都可以之间改成===,如果可以,那么就可以用一键替换的方式直接将  ==  换成  ===  。当然,能用此方法的前提就是已经执行果ng lint命令了,这样才能确保每个==左右都有一个空格,才可以在查找时不出差错。

2)Too much space after 'import', Too much space before 'from'

这类错误就没什么好讲的,就把所有指出的地方的多个空格都改成一个空格就好了。我在该这类错误时发现我们公司的项目代码中有好多component的import部分有很多相同的部分,因为都是复制来复制去的,所以多余的空格也到处都是,结果这个错误解决后,我的错误总数瞬间少了很多。

3)comment must start with a space

这类问题也没有技术含量,但是也没有什么快速的方法可以解决,就在所有指出的代码行中第一个双斜杠//后加一个空格。

4)variable "XXX" used before declaration

需要将提到的变量的声明移至使用到该变量的地方前面,最简单的方法就是将变量的声明都放在最前面。

5)exceeds maximum line length of 140

这类问题只是定义了每行字数的最大值,140可以换成自定义的任何数字。在ts文件的最开始可以加上 // tslint:disable:max-line-length 则可以忽略此文件中每行字数限制问题,有时候,有些文件确实不适合限制每行的字数。

6)Missing radix parameter

当你使用 parseInt(string, radix) 函数时,如果你没有定义radix就会出现这个错误。这个函数是将一个string转换成数字,radix就是表示进制,比如 parseInt('10', 10) 就是将字符10转换成十进制的数字10。

7)Implement lifecycle hook interface ...

当你使用了ngAfterViewInit, ngDestroy之类的lifecycle hook后却没有implement时,就会发生此类问题。解决办法很简单,只需要把对应的implements上就好啦,比如,如果你使用了ngDestroy,那你就需要import OnDestroy并且implements它。

8)This import is blacklisted, import a submodule instead

我遇到的错误发生的地方主要在 import { Observable } from 'rxjs/Rx'; ,进过搜索后,找到的解决办法就是将它改成 import { Observable } from 'rxjs/Observable'; 。但是用相似方法去修改 import { Subject } from 'rxjs/Rx'; 时却导致了项目别的错误,目前还不清楚原因。

9)The selector of the component XXX should have prefix app / The selector of the component XXX should be named kebab-case and include dash

这两类错误都出自component定义selector名称时不符合标准。按照默认的标准,selector的名字应当如"app-example", "app-another-example",当然你也可以在tslint.json文件中自定义app以外的前缀。

后记:当然,还有很多错误没有列出,也许是我的项目恰巧没有出现的错误,也许是我还没来得及修改。如果后期有修改别的错误的话,我会更新这篇文章。欢迎看到这里的读者评论补充或纠错。

Angular: 执行ng lint后如何快速修改错误的更多相关文章

  1. ANGULAR 使用 ng build --prod 编译报内存错误的解决办法

    如果你遇到如下的情况 <--- Last few GCs ---> [13724:0000020D39C660D0] 231298 ms: Mark-sweep 1356.3 (1433. ...

  2. PDO exec 执行时出错后如果修改数据会被还原?

    PDO exec 执行时出错后如果修改数据会被还原? 现象 FastAdmin 更新了 1127 版本,但是使用在线安装方式出现无法修改管理员密码的问题. 一直是默认的 admin 123456 密码 ...

  3. Java 操作jar包工具类以及如何快速修改Jar包里的文件内容

    需求背景:写了一个实时读取日志文件以及监控的小程序,打包成了Jar包可执行文件,通过我们的web主系统上传到各个服务器,然后调用ssh命令执行.每次上传前都要通过解压缩软件修改或者替换里面的配置文件, ...

  4. MySQL误操作后如何快速回滚(转)

    本文转自http://www.cnblogs.com/dfcao/p/6147970.html#undefined 感谢作者 基本上每个跟数据库打交道的程序员(当然也可能是你同事)都会碰一个问题,My ...

  5. Java如何快速修改Jar包里的文件内容

    需求背景:写了一个实时读取日志文件以及监控的小程序,打包成了Jar包可执行文件,通过我们的web主系统上传到各个服务器,然后调用ssh命令执行.每次上传前都要通过解压缩软件修改或者替换里面的配置文件, ...

  6. 执行ng build --prod --aot命令报错

    D:\git\**\src\main\iui>ng build --prod --aotHash: 257ab60feca43633b6f7Time: 25358mschunk {0} poly ...

  7. [Asp.net mvc]实体更新异常:存储区更新、插入或删除语句影响到了意外的行数(0)。实体在加载后可能被修改或删除。

    学习asp.net mvc 时在更新实体进行SaveChanges()的时候出现了异常,异常如下: “/”应用程序中的服务器错误. 存储区更新.插入或删除语句影响到了意外的行数(0).实体在加载后可能 ...

  8. spring boot mybatis 打成可执行jar包后启动UnsatisfiedDependencyException异常

    我的spring boot + mybatis项目在idea里面执行正常,但发布测试环境打成可执行jar包后就启动失败,提示错误如下: [ ERROR] [2018-08-30 17:23:48] o ...

  9. svn执行update操作后出现:Error : Previous operation has not finished; run 'cleanup' if it was interrupted.

    svn执行update操作后出现:      Error : Previous operation has not finished; run 'cleanup' if it was interrup ...

随机推荐

  1. Swift JSON字符串和字典以及数组的互转

    1.JSONString转换为字典 // JSONString转换为字典 func getDictionaryFromJSONString(jsonString:String) ->NSDict ...

  2. Ubuntu composer 安装thinkphp5 失败,报错:[ErrorException] mkdir(): Permission denied

    在Linux环境下,使用composer安装thinkphp5,安装时,报错:[ErrorException]               mkdir(): Permission denied : 看 ...

  3. 面向对象_new,__eq__,__hash__

    老师博客:http://www.cnblogs.com/Eva-J/articles/7351812.html __new__ __init__是一种初始化的方法 __new__是构建方法,创建一个对 ...

  4. 爬虫实例系列一(requests)

    一 爬虫简介 ''' 爬虫:通过编写程序,模拟浏览器上网,让其去互联网上爬取数据的过程 分类: 通用爬虫:爬取全部的页面数据 聚焦爬虫:抓取页面中局部数据 增量式爬虫:爬取网站中更新出的数据 反爬机制 ...

  5. 11-page分页原理

    创建一个分页对象PageBean<T>来存储分页信息+实体信息, 客户端请求时传递分页信息, 服务端将实体信息+分页信息放进分页对象返回给客户端. 实例如下: listStudent.js ...

  6. Java HttpURLConnection发送post请求示例

    public static Map<String, Object> invokeCapp(String urlStr, Map<String, Object> params) ...

  7. map和unordered_map的差别和使用

    map和unordered_map的差别还不知道或者搞不清unordered_map和map是什么的,请见:http://blog.csdn.net/billcyj/article/details/7 ...

  8. 初识:java虚拟机的内存划分

    什么是内存? 内存是计算机中的重要原件,临时存储区域,作用是运行程序.我们编写的程序是存放在硬盘中的,在硬盘中的程序是不会运行的,必须放进内存中才能运行,运行完毕后会清空内存.Java虚拟机要运行程序 ...

  9. opentack-openstack组件及功能(1)

    一. OpenStack各组件间的关系 图22.1 OpenStack各组件间的关系 1.基础管理服务包含Keystone,Glance,Nova,Neutron,Horizon五个服务 (1)Key ...

  10. GET与POST类型接口

    工作当中经常用到这两种类型的接口,一直对它们两个的区别一知半解,并不能从原理上说出区别. GET和POST最直观的区别应该就是GET将url包含在参数当中,POST通过request body(请求主 ...