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 代码?

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

You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.