Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 防止导入es6默认导出_Node.js_Ecmascript 6 - Fatal编程技术网

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。对于那些对编辑问题感到好奇的人来说,这应该会对你有所帮助。