【问题标题】:ESlint linting gulpfile.jsESlint 检测 gulpfile.js
【发布时间】:2025-03-01 02:45:01
【问题描述】:

您好,我使用 Atom 和名为 lint-eslint 的插件来检查我的 javascript 代码,它确实工作正常,但我的 gulpfile.js 上有一个非常烦人的 linting 错误

这是触发 linting 错误的代码,我正在使用 airbnb .eslintrc 配置文件用于 ESlinter。

gulp.task('lint', () => {
 return gulp.src(['**/*.js', '!node_modules/**', '!src/**'])
 .pipe(gulpif(args.verbose, gprint()))
 .pipe(eslint())
 .pipe(eslint.format())
 .pipe(eslint.failAfterError());
});

请注意,我正在尝试使用箭头语法。 我收到以下错误围绕箭头主体的意外块语句。 当我删除 return 时,它就消失了。

这与 gulp src 的早期返回流有关是否有其他方法可以返回它或者我如何纠正错误我知道我可以忽略该文件但我想知道是否有另一种方法返回 @ 987654323@

【问题讨论】:

  • “当我删除 return 时,它就会消失。” 因为 () => {foo}() => foo 不同。第一个返回undefined,后者返回foo 的值。因此,他们可能无法像使用 () => { return foo; } 那样简单地移除大括号。

标签: javascript gulp ecmascript-6 eslint arrow-functions


【解决方案1】:

由于您的函数只是返回一个值,因此您可以省略花括号{}return 语句,这使代码更轻巧且更易于阅读。

涉及的规则是arrow-body-style,它“强制在箭头函数中一致地使用大括号”

gulp.task('lint', () => 
  gulp.src(['**/*.js', '!node_modules/**', '!src/**'])
   .pipe(gulpif(args.verbose, gprint()))
   .pipe(eslint())
   .pipe(eslint.format())
   .pipe(eslint.failAfterError())
);

【讨论】:

  • 谢谢,我猜当你没有仔细阅读箭头语法规范时会发生这种情况。
【解决方案2】:

ES6 箭头函数可以返回一个不带“return”字样的对象,如下所示:

let func = () => ({key: 'value'});
let a = func();   // and a will be an object {key: 'value'}

这是 ES6 标准。

而且 eslint-airbnb 风格指南认为,如果您的箭头函数只返回一个对象,则不需要“返回”。所以你的代码可以是这样的:

gulp.task('lint', () => (
 gulp.src(['**/*.js', '!node_modules/**', '!src/**'])
  .pipe(gulpif(args.verbose, gprint()))
  .pipe(eslint())
  .pipe(eslint.format())
  .pipe(eslint.failAfterError())
));

查看更多:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions 关于返回对象字面量。

【讨论】:

  • 请注意,最后一次管道调用后的; 应该被删除,否则是语法错误
  • 感谢您的解释,我会更详细地阅读规范。
  • 不知道你的答案的第一部分(关于对象)与这里有什么关系。