Skip to content
huanghoujin-kavout edited this page Jan 30, 2018 · 27 revisions

常见问题

如何安装 FECS?

FECS 运行于 Node.js 环境,因此需要保证已经安装 Node.js 之后再执行以下命令:

$ [sudo] npm install fecs -g

如果安装失败报权限相关的问题,请使用 sudo

格式化代码后空行丢失怎么办?

由于修复后的代码生成使用 escodegen,它将忽略源码中的空行,因此格式化后的代码将会缺少原有的空行(相关讨论),目前暂无解决方案,后续将由 jformatter 提供规则,根据相应规则为某些 statement 前或后增加空行的方式,以保证代码的可读性,目前社区有相应的实现:esformatter,目前已经使用 esformatter 作最后步骤的格式化。

如何忽略某个错误?

ESLint 大部分给出的是关于代码风格或有安全隐患方面的问题,一般没有特殊情况的话,还是全部都修复掉。但是只要理由充分,可以自行配置忽略某部分代码的问题。

项目级别

可以在项目根目录创建 .eslintrc .fecsrc 文件,配置项将会覆盖 FECS 的默认值。FECS 默认针对的是 Web 项目,对于 node 项目,需要更改的配置如下:

{
    "eslint": {
        "env": {
            "node": true,
            "browser": false
        },

        "rules": {
            "no-console": 0
        }
    }
}

文件级别

如果只是某些文件需要 特殊照顾,可以在文件头使用 /* eslint-disable ruleName */ 来配置。

/* eslint-env node */
/* eslint-disable no-console */

文件中代码

部分代码的解决方式与文件类似,但是在代码结束的地方需要再恢复规则。

/* eslint-disable fecs-max-statements */

//
// 这里是不可分割的算法代码,但是超出默认的 50 statement
//

/* eslint-enable fecs-max-statements */

我的项目没有使用 AMD 方式,所以会出现一些全局变量,如何使代码通过检查?

与上一个问题类似,在 .fecsrc 中使用 globals 字段配置,示例中假设要标识的全局变量名为 nirvana

{
    "eslint": {
        "env": {
            "node": true,
            "browser": false
        },

        "globals": {
            "nirvana": true
        },

        "rules": {
            "no-console": 0
        }
    }
}

或者在文件中使用注释标识:

/* globals nirvana */

适用于常见的报错信息:

JS070 [强制] 变量在使用前必须通过 var 定义。

如何输出 JSON 格式的检查结果?

比如需要编程方式使用 FECS 的检查结果,需要有更好的格式支持,此时可以使用 format 参数来指定格式,同时配合使用 silent

$ fecs --silent --format=json

目前支持的格式有 JSONXMLHTML

忽略某些文件?

目前的方法是使用 ignore 参数:

$ fecs --ignore='**/cli/**'

使用的是 glob 的 pattern,如果有多个 pattern,可以写多个 ignore

$ fecs --ignore='**/cli/**' --ignore='**/foo.js'

同时也可以使用 .fecsignore 文件来配置类似 Git 方式的 .gitignore 忽略规则。

有没有集成到编辑器或 IDE 的支持?

有这个计划,联盟研发部 的高工 李玉北 正在开发相关的支持,未来将支持以下 IDE/Editor:

目前正在计划开发 Eclipse 的版本已提供 Eclipse 的插件支持。

如何修复 JS070 [强制] 变量在使用前必须通过 var 定义。 的错误?

主要是由于检测到非当前文件定义的变量(全局变量),在确定不是拼写错误之后,只要把变量标识为 globals 即可,标识方法参考上面的 如何忽略某个错误?。由于 eagle 的限制,提交 SVN 的项目建议使用文件级别的忽略,GIT 的项目可以使用项目级别的配置。

如何修复使用 jQueryDataTable 插件的问题?

比如下面的代码:

javascript

var table = $('foo').DataTable({});


根据规范,只允许构造函数的首字母大写。而对构造函数的调用,需要使用 `new` 操作符。因为上面的代码可以改成以下三种方式:

```javascript
    // 第一种方式,增加 new 操作符
    // 注意不能在上面的代码中直接加 new,否则 new 的是 $
    var el = $('foo');
    var table = new el.DataTable({});

    // 第二种方式
    var DataTable = $('foo').DataTable;
    var table = new DataTable({});


    // 第二种方式
    var dataTable = $('foo').DataTable
    var table = dataTable({});

如何修复 JS003 [强制] 使用 4个空格做为一个缩进层级,不允许使用2个空格 或tab` 字符。?

  • 常见的原因是使用了 tab 作缩进,这在 cooder 上查看时表现为一个个小圆点,与 space 的空白是有区别的。

  • 另外一个常见的原因是由于前面的旧代码缩进数不错,导致后面的缩进数检查错误。

  • 比较难排查的是数组直接量的缩进。通常数组直接量内元素,要么全部写在一行,如果出现元素间换行,[ 后和 ] 前必须有换行。当使用数组直接量作为 HTML 字符拼接时,相邻元素间允许差 0 或 1 个缩进。

fecs format 没有效果?

  • 默认格式化后的代码会保存在项目的 output 目录下,可以通过 --output 参数来指定输出的目录,也可以使用 --replace 参数来直接替换源文件。当 --output=.--output=./ 时也会直接替换源文件。

  • 如果被格式化的文件出现语法错误,也是会导致没效果的。

  • 对于 CSS 文件,如果使用了针对 IEexpression,虽然没有语法错误,但是由于 csscomb 使用的 gonzales-pe 的限制,也会导致格式化出错从而看不到效果。

没有外网权限的开发机怎么安装 fecs

  • 首先需要通过 jumbo 安装 nodejs

$ jumbo install nodejs

建议安装 4.x 以上版本。

  • 再以指定 registry 的方式安装 fecs

$ npm i -g fecs --registry=http://npm.internal.baidu.com

如果安装失败,建议多尝试几次。

如何检查以 .es6 为扩展名的 ES6 代码?

[email protected] 之前的版本只能检查 .js 扩展名的代码,之后的版本需要显示指定 --type 参数,并且包含 es6 的取值才行。