我可以为匿名默认导出强制执行吗?

3
如果您有一个与默认导出同名的文件,为什么还需要给该导出命名?我在这里没有做到“不重复(DRY)”。
我们有一个规则以防止匿名默认导出,但是当有人使用匿名导出时,如何执行相反操作并强制出错呢?

你的问题是什么?你是在问如何禁用那个eslint规则吗?还是在问为什么存在那个规则?一般来说,每个人可能会抱怨的事情都有一个eslint。如果对于你的代码库不合适,你不必遵守所有这些规则。 - Alex Wayne
@AlexWayne,我稍微编辑了一下我的问题,谢谢。如果有人没有使用匿名默认导出,我需要强制产生一个错误。 - T_DaMER
2个回答

5
如果你有一个和默认导出同名的文件,为什么需要对这个导出进行命名?
不需要。这就是为什么你要链接到Linter 规则 - 这并不是必须的,但是有些人认为这是“最佳实践”,因为
确保命名默认导出有助于通过鼓励在模块的声明和导入站点重复使用相同的标识符来提高代码库的可查性。
基本上,人们认为如果你有:
export default () => { console.log('Hello'); }

人们更有可能去做的事情

import logHello from 'sayHello'; // file one
import greeting from 'sayHello'; // file two
import sayHello from 'sayHello'; // file three

但是如果你这样做

const sayHello = () => {
    console.log('Hello');
}
export default sayHello

人们将更加一致地执行

import sayHello from 'sayHello';

这使得代码更易于阅读,因为无论从哪里导入,相同的函数都被称为相同的内容。
当你询问“如何强制它?”时,
我假设你的意思是如何强制linter接受你的匿名默认导出?你需要在行内禁用规则:
/* eslint import/no-anonymous-default-export: [2, {"allowArrowFunction": true}] */
export default () => {}

或者更新你的eslint配置以便通常接受它。


谢谢,你的解释很好,但是我和我的团队决定使用匿名导出,所以如果有人没有使用类或函数的匿名默认导出,我需要强制出错。 - T_DaMER
你想要一个与你链接的规则相反的代码检查工具吗?是这样吗? - CherryDT
1
@CherryDT,是的,我需要相反的规则。 - T_DaMER

0

如果你真的想要一个匿名的默认导出,即使你的 linter 阻止了它,你可以使用注释来禁用 eslint 规则。所以,在你的情况下,// eslint-disable-next-line import/no-anonymous-default-export 应该可以工作。或者,如果你想在所有地方禁用该规则,你可以修改 eslint 配置

但是你应该阅读命名默认导出的理由:

确保默认导出被命名有助于通过鼓励在声明站点和导入站点重复使用相同的标识符来提高代码库的 grepability。

特别是对于导出的类,另一件需要考虑的事情是给导出的类命名将设置它的 constructor.name,这可能很有用。

const bar = class Foo {};
(new bar()).constructor.name; // 'Foo'

感谢constructor.name,我之前不知道这个。我们主要使用export default function() {...},所以如果有人尝试执行export default function Do() {...},我需要强制报错。 - T_DaMER

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接