【问题标题】:Prevent an es6 default export from being imported防止导入 es6 默认导出
【发布时间】:2018-10-19 21:47:04
【问题描述】:

我有一个小节点包,我希望用户只在他们的项目中使用命名导入。

import { Logger } from 'logger';

但是,没有什么可以阻止用户这样做

import defaultImportedLogger from 'logger';

当他们发现 defaultImportedLoggerundefined 因为我的项目在任何地方都没有 export default 时,他们将很难学。因此默认导出为undefined

如果我尝试导入命名导出,例如:

import { foo } from 'logger'

我的编辑会抱怨,因为foo 没有暴露。为什么我的编辑在默认导入的情况下不报错?

【问题讨论】:

  • 不导出某些东西会阻止他们导入它(但不是试图这样做,没有什么可以做到的)。你只是在做正确的事。
  • 为什么我的编辑不抱怨?” - 这是一个单独的问题。
  • 正确@Bergi。对于那些对编辑问题感到好奇的人,这个eslint rule 应该会对你有所帮助。

标签: node.js ecmascript-6


【解决方案1】:

在未定义默认导出时尝试导入默认导出的结果取决于您使用的捆绑器。例如 Rollup throws an error: "'default' 不是由 导出的"。

我认为没有任何方法可以阻止用户导入默认导出。您可以做的最好的事情是导出一个在调用时抛出错误的函数,并显示错误消息“不要使用默认导出”。

【讨论】:

  • 我会认为每个未检测到此问题的捆绑程序都是错误的。规范定义必须抛出未解析的导入。不,您应该导出抛出的函数,因为这会使编译时检查变得不可能。无论如何你都会得到运行时异常。
  • @Bergi 好吧,我认为收到错误消息并解释问题所在比undefined 更好。
  • 我猜想“_logger.default 不是函数”或类似的异常应该足够有用,当然这取决于转译器。我看不出是什么让 default 导入特别,您不能也不应该为每个不存在的可能导出提供额外的错误消息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-03
  • 2014-09-15
  • 2016-08-02
  • 2017-06-09
  • 2020-10-14
  • 1970-01-01
相关资源
最近更新 更多