【问题标题】:How to solve ESLint's "prefer default export" error when exporting a variable?导出变量时如何解决 ESLint 的“首选默认导出”错误?
【发布时间】:2020-03-11 13:32:15
【问题描述】:

在我单独的 validation.js 文件中,我导出了一个名为 noFutureDate 的变量:

export const noFutureDate = value => {
  const userDate = value.split('-').join('');
  ...
  return userDate < now;
};

然后在我的组件中我像这样导入noFutureDate

import { noFutureDate } from '@/validation';

但是 ESlint 烦人地说:

错误:首选默认导出 (import/prefer-default-export) 在 src/validation.js:1:1:

我知道如何将export default 与函数等一起使用,但是在这里我的变量noFutureDate 可以做什么,如何在保持ESLint 满意的同时导出它?

【问题讨论】:

    标签: vue.js eslint


    【解决方案1】:

    每当您在规则中看到 / 斜线时,该规则并非来自 ESLint。

    import/prefer-default-export 是来自eslint-import-plugin 的规则(您可能已直接导入,或者您在环境中使用的某些配置已导入它)。

    https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/prefer-default-export.md 上的这条规则的文档没有特别提到为什么建议这条规则;有些规则纯粹是出于文体原因(实际上,同一个插件可以让您执行相反的操作:https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-default-export.md)。我所看到的命名导入有更多支持使用它的理由——例如它可以灵活地添加到未来的导出中。

    因此,虽然通常许多 eslint 规则(或插件设置的规则)都有很好的理由,但其他的可以安全地忽略。除非特定于 vue 的插件出于与该环境相关的某种原因推荐它(我自己也不了解 vue.js),否则我认为您可以放心地忽略这一点。

    在 eslint 中有多种忽略规则的方法。您可以使用inline comment 禁用group of files 文件中的group of files,或者您可以禁用规则for your whole project

    但是,如果您确实想更改代码而不是忽略,或者发现建议这样做是有原因的,您可以这样做:

    export default value => {
      const userDate = value.split('-').join('');
      // ...
      return userDate < now;
    };
    

    在另一个文件中:

    import noFutureDate from '@/validation';
    

    【讨论】:

      【解决方案2】:
      const noFutureDate = value => {
        const userDate = value.split('-').join('');
        ...
        return userDate < now;
      };
      
      export default noFutureDate;
      

      【讨论】:

        【解决方案3】:
        export default { noFutureDate }
        

        【讨论】:

        • 欢迎,Yoki。请花点时间查看已接受的答案。这是在 Stack Overflow 上提供有用的解释级别的一个很好的例子。请记住,我们的目标是帮助未来的读者学习,而不仅仅是提供答案。鉴于此,您可以编辑您的答案以提供更多解释吗?讨论它与接受的答案的比较也会很有用。
        • 简单高效。
        • @YokiYu 哈哈。你很幸运,你的“简单而高效”的反驳只是停留在零点。我记得在没有给我纠正自己的机会的情况下得到负分,我最终删除了我的答案。
        • @duduwe 哈哈~没错。我很想写下大量的解释,但在这种情况下,简单的答案会更清晰易懂。
        猜你喜欢
        • 1970-01-01
        • 2018-06-01
        • 2021-08-15
        • 2021-02-08
        • 2016-10-12
        • 1970-01-01
        • 1970-01-01
        • 2019-05-01
        • 1970-01-01
        相关资源
        最近更新 更多