【问题标题】:Making ESLint work for files which are loaded by others使 ESLint 适用于其他人加载的文件
【发布时间】:2016-08-11 22:36:22
【问题描述】:

我有一组脚本,其中一个加载另一个脚本文件并使用其中定义的函数。

例如,假设我有 main.js 具有以下来源的脚本

load("helper.js");
var stdin = new java.io.BufferedReader( new java.io.InputStreamReader(java.lang.System['in']) );
function readline() {
    var line = stdin.readLine();
    return line;
}
var N = parseInt(readline());
for(var i = 0; i<  N; i++)
{
    print("fd630b881935b5d43180ff301525488a");
    var num = parseInt(readline());
    var ans = perfectNumberCheck(num);
    print(ans);
    print("dc29e6fa38016b00627b6e52956f3c64");
}

我有另一个脚本文件,helper.js,它有以下来源

function perfectNumberCheck(num) {
    if(num == 1) 
    {
        return 0;
    }
    var halfNum = (num/2) + 1;
    var sum = 0;
    var retVal = 0;
    for(var i=1 ; i < halfNum; i++){
        if(num % i === 0){
            sum = sum + i;  
        }
    }
    if(sum == num){
        retVal = 1;
    }
    else {
        retVal = 0;
    }
    return retVal; 
}

可以看出,main.js 使用了函数perfectNumberCheck。现在,当我使用 eslint main.js helper.js 或使用 eslint *.js 在两个文件上运行 ESLint 时,我得到了 no-unused-vars 错误 'perfectNumberCheck' is defined but never used,即使它正在 main.js 中使用。

我想在配置中保留这个错误,但不希望 ESLint 在这种情况下显示它。

有没有办法让 ESLint 解决这些依赖关系,而无需将整个代码写入单个脚本文件中?

【问题讨论】:

    标签: eslint


    【解决方案1】:

    您可以在helper.js 中添加/* exported perfectNumberCheck */ 之类的评论,告诉no-unused-vars 该函数在该文件之外的其他地方使用:

    /* exported perfectNumberCheck */
    function perfectNumberCheck() {
        // ...
    }
    

    ESLint 本身独立地对每个文件进行 lint,因此它不会解析在其他文件中定义的标识符。 /* exported ... */ commentglobals 允许您通知 ESLint 其他文件中的依赖关系。

    由于导出的 cmets 旨在通过存在于全局范围内来指示在别处使用的名称,因此当文件的源不在全局范围内时,它们无效。具体来说,引用文档:

    请注意,/* exported */ 对以下任何一项均无效:

    • 当环境为nodecommonjs
    • parserOptions.sourceTypemodule
    • ecmaFeatures.globalReturntrue

    【讨论】:

    • helper.js 中使用/* exported perfectNumberCheck */,运行eslint helper.js,你还有'perfectNumberCheck' is defined but never used?你能分享一个代码块来在online demo中重现它吗?
    • 您可以在问题中使用helper.js 的代码块。在演示网站的Rules Configuration下,请选择node。使用第一行的注释 /* exported perfectNumberCheck */,您将收到错误 2:10 - 'perfectNumberCheck' is defined but never used。 (无未使用变量)
    • 啊哈!我从文档中复制了一条注释并将其添加到我的答案中。由于 Node.js 在加载文件时会在文件周围添加其模块包装器,因此变量不是全局范围的,因此导出的 cmets 无效。为什么你使用node 环境而不是require()?你不是在node执行吗?
    • 其实,没有。这些程序使用 Rhino 和/或 Spidermonkey 执行。我无法弄清楚应该使用给定环境中的哪个环境。你能推荐一个吗?
    • ESLint 目前没有rhino 环境选项,虽然sindresorhus/globals,我们从中提取环境全局变量,已经has them defined。还没有人问过rhino,但是有willingness to add it if we get a request,所以请继续和file an issue 申请!
    猜你喜欢
    • 2021-10-17
    • 1970-01-01
    • 1970-01-01
    • 2019-01-03
    • 1970-01-01
    • 2018-12-07
    • 2019-12-28
    • 2021-10-09
    • 2010-12-04
    相关资源
    最近更新 更多