Node.js 防止导入es6默认导出
我有一个小的节点包,我希望用户在他们的项目中只使用命名导入Node.js 防止导入es6默认导出,node.js,ecmascript-6,Node.js,Ecmascript 6,我有一个小的节点包,我希望用户在他们的项目中只使用命名导入 从“Logger”导入{Logger} 但是,没有什么可以阻止用户这样做 从“logger”导入defaultImportedLogger 当他们发现defaultImportedLogger是未定义的,因为我的项目在任何地方都没有export default时,他们将以艰难的方式学习。因此,默认导出是未定义的 如果我尝试导入命名的导出,例如: 从“记录器”导入{foo} 我的编辑会抱怨,因为foo没有公开。为什么我的编辑器在默认导入情
从“Logger”导入{Logger}代码>
但是,没有什么可以阻止用户这样做
从“logger”导入defaultImportedLogger代码>
当他们发现defaultImportedLogger
是未定义的
,因为我的项目在任何地方都没有export default
时,他们将以艰难的方式学习。因此,默认导出是未定义的
如果我尝试导入命名的导出,例如:
从“记录器”导入{foo}
我的编辑会抱怨,因为foo
没有公开。为什么我的编辑器在默认导入情况下不抱怨?在未定义默认导出时尝试导入该导出的结果取决于您使用的绑定器。例如Rollup:“'default'不是由导出的”
我认为没有任何方法可以阻止用户导入默认导出。最好的办法是导出一个在调用时抛出错误的函数,并带有错误消息“不要使用默认导出”。规范定义了未解析的导入必须抛出。不,您不应该导出抛出的函数,因为这会使编译时检查变得不可能。不管怎样,您都会遇到运行时异常。@Bergi嗯,我认为最好是得到一条错误消息,解释出哪里出了问题,而不仅仅是未定义的。我想异常“\u logger.default
不是函数”或类似的异常应该足够有用,当然这取决于transpiler。我看不出是什么使默认值
导入变得特别,您不能也不应该为每个不存在的可能导出提供额外的错误消息。不导出某些内容将阻止他们导入它(但不是尝试,没有什么可以做到)。你做得对。“为什么我的编辑不抱怨?”-这是一个单独的问题。正确@Bergi。对于那些对编辑问题感到好奇的人来说,这应该会对你有所帮助。