我收到了GitHub 上的问题 https://github.com/benmosher/eslint-plugin-import/issues/54关于我的 ES2015 模块导入/导出验证插件 ESLint 无法识别default
使用以下语法导出:
export {
foo as default,
bar
}
我的插件将检查以下(等效?)语法没问题:
export default foo;
export const bar = ..;
Both and Esprima http://esprima.org/demo/parse.html?code=%2F%2F%20Life%2C%20Universe%2C%20and%20Everything%0Avar%20answer%20%3D%206%20*%207%3B%0A%0Aexport%20%7B%20answer%20as%20default%20%7D%3B%0A解析类似的语法不会出现错误,这适用于两端使用 Babel 的代码(导入和导出)。
然而,我不相信spec http://www.ecma-international.org/ecma-262/6.0/#sec-exports-static-semantics-early-errors允许前者export { x as default }
form:
对于每个IdentifierName
n
in ReferencedBindings
of ExportClause
:如果 n 的 StringValue 是预留字,或者 n 的 StringValue 是以下之一,则这是语法错误:“implements”、“interface”、“let”、“package”、“private”、“protected”、“public” 、“静态”或“产量”。
ReservedWord
确实包括default http://www.ecma-international.org/ecma-262/6.0/#sec-reserved-words,尽管我认为有人可能会争辩说ReferencedBindings
正在指的是特别针对模块本地标识符名称 http://www.ecma-international.org/ecma-262/6.0/#sec-exports-static-semantics-exportedbindings那些正在exported (i.e. foo
) 而不是导出的名称本身。
能够导出保留字通常看起来也很奇怪; Babel 也会很高兴地允许类似的事情
// ./foo.js
export { foo as yield }
// ./mod.js
import { yield as nonReservedIdentifier } from './foo'
所以,总而言之:就是export { foo as default }
ES2015 中导出默认值的有效方法?