eslint /* exported functionName */ 在浏览器环境中不工作

eslint /* exported functionName */ not working in browser env

我有一些函数在一个 js 文件中定义并在其他文件中使用。他们每个人都有 /* exported functionName */ 评论,我将我的 eslint env 设置为 browser/jquery。根据我对 documentation 的阅读,这就是我所需要的,但它似乎不起作用。

我做错了什么?

这是 .eslintrc(它扩展了 this one,尽管我在没有 extends 的情况下得到了相同的行为):

{
  "extends": "../../.eslintrc",
  "env": {
    "browser": true,
    "jquery": true
  }
}

并且,这是函数之一(这里是 second and third):

/**
 * Returns the next hour as Date
 * @return {Date} the next hour
 */
/* exported nextHour */
function nextHour() {
  var oneHour = new Date();
  oneHour.setHours(oneHour.getHours() + 1);
  return oneHour;
}

最后,这是我从 eslint 得到的输出:

/Users/nfriedly/visual-recognition-nodejs/public/js/demo.js
  24:10  error  'nextHour' is defined but never used  no-unused-vars
  37:10  error  'resize' is defined but never used    no-unused-vars

/Users/nfriedly/visual-recognition-nodejs/public/js/use.js
  26:10  error  'setupUse' is defined but never used  no-unused-vars

如果我用 // eslint-disable-next-line no-unused-vars 替换 /* exported... 注释,它会起作用,但我知道这不是正确的解决方案。

您可以从 https://github.com/watson-developer-cloud/visual-recognition-nodejs/tree/eslint-exported 查看完整的项目,然后 运行 npm install; npm test 如果您想亲眼看看它。

您的配置表明您在 Node 环境中工作。 Node 在每个模块周围都有一个额外的范围,因此全局变量在 Node 中实际上是不可能的(至少与在浏览器中的方式不同)。因此,当 no-unused-vars 规则看到任何带有 globalReturn 标志的环境(节点、CommonJS、共享节点浏览器)或模块打开时,它会忽略 /* exported */ 注释。如果要使用全局变量和导出的注释,需要移除Node环境并启用浏览器环境。

显然,airbnb 配置指定的 Babel-ESLint 解析器可以覆盖配置文件的解析,从而破坏记录的级联行为。设置 "parser": null 解决了这个问题。