我收到了关于我的ES2015模块导入/导出验证插件的一个
issue on GitHub,用于ESLint不能以下列语法识别默认导出:
export { foo as default,bar }
我的插件将在下面的(相当的)语法中没有问题:
export default foo; export const bar = ..;
Babel和Esprima都解析相似的语法没有错误,这适用于使用Babel在两端(导入和导出)的代码.
但是,我不相信spec允许以前的导出{x作为默认}形式:
For each
IdentifierName
n
inReferencedBindings
ofExportClause
: It is a Syntax Error if StringValue of n is a ReservedWord or if the StringValue of n is one of: “implements”,“interface”,“let”,“package”,“private”,“protected”,“public”,“static”,or “yield”.
ReservedWord does include default
虽然我认为有人可能会认为ReferencedBindings是指正在导出的specifically to the module-local identifier names(即foo)而不是导出的名称本身.
出口保留字也通常似乎是一件奇怪的事情;巴别乐高兴地也允许像这样的东西
// ./foo.js export { foo as yield } // ./mod.js import { yield as nonReservedIdentifier } from './foo'
所以,总结:是导出{foo作为默认}在ES2015中导出默认值的有效方法?
解决方法
是的,ReferencedBindings仅指第一个IdentifierName.所以
export { default as something } // or export { default }
是无效的,但是
export { something as default }
不是. ESLint需要在这里修复.