【问题标题】:Silence JSHint when a specific在特定的情况下使 JSHint 静音
【发布时间】:2014-10-25 01:36:34
【问题描述】:

考虑以下标准 Express 函数:

if (app.get('env') === 'development') {
    app.use(function (err, req, res, next) {
        res.status(err.status || 500);
        res.render('error', {
            message: err.message,
            error: err
        });
    });
}

显示以下警告:

'next' 已定义但从未使用过。 - W098

我知道我可以禁用所有警告,但这不是我想要的。我需要的是仅针对特定参数(上面的 sn-p 中的“下一个”)使 JSHint 静音。

对于这个看似常见的问题,我还没有看到任何明确的答案。有什么想法吗?

谢谢!

【问题讨论】:

  • 恐怕你所问的是不可能的。本质上,您可以在您的.jshintrc 或您的文件中添加unused: vars,但我认为您不能仅针对特定参数禁用它。
  • "[...] 这个看似常见的问题。" 这实际上是相当不寻常的,因为 Express 需要 4 个命名参数来识别错误处理程序。在大多数情况下,函数的length 并不重要,删除附加参数以满足警告不会影响应用程序的运行方式。
  • 2nd answer 与 Paolo 链接的问题可能是最接近的 - 禁用 function 中的 unused 警告。 JSHint 的"inline configuration" comments是函数范围的,这意味着如果你把它们放在一个函数中,它们只会影响这个函数的代码。
  • Jonathan, Express 4 要求 arity of 4 进行错误处理:“错误处理中间件的定义与常规中间件一样,但必须使用 4 的arity 定义(即签名 (err, req, res, next))”。见expressjs.com/guide.html#error-handling

标签: node.js express jshint


【解决方案1】:

在这种情况下,您可以执行以下操作

if (app.get('env') === 'development') {
    app.use(function (err, req, res, next) {
        /*jshint unused: vars*/
        var foo;

        res.status(err.status || 500);
        res.render('error', {
            message: err.message,
            error: err
        });
    });
}

现在jshint 不会为next 哭泣,尽管它仍会警告foo 已定义但未使用。

重要的是,这种抑制将绑定到函数的范围。

【讨论】:

    【解决方案2】:

    是的,这是可能的!

    如果您使用的是 JSHint 的默认设置,则此线程上接受的答案也是您的答案: Is there a way to suppress JSHint warning for one given line? 它展示了如何使用 cmets 有条件地忽略 JSHint 中抛出的特定错误/警告。

    如果您使用 Gulp 或 Grunt 等构建工具,您可以将其添加到插件任务配置中的选项中。例如,使用 Grunt: 请参阅https://github.com/gruntjs/grunt-contrib-jshint/blob/master/README.md 上的“忽略特定警告”部分。

    希望这会有所帮助!

    【讨论】:

    • 虽然不完全是我想要的,但在违规行之后添加“// jshint ignore:line”会使警告静音。它可能会吞下其他警告,但在我的情况下它不会,所以它工作正常。
    猜你喜欢
    • 1970-01-01
    • 2022-01-01
    • 2011-09-19
    • 1970-01-01
    • 1970-01-01
    • 2016-05-04
    • 2020-06-06
    • 2013-01-28
    相关资源
    最近更新 更多