Ich erhielt ein issue on GitHub über meine ES2015-Modul Import/Export-Validierung Plugin für ESLint nicht den default
Export in folgenden Syntax zu erkennen:Ist `export {foo as default}` gültig für ES2015?
export {
foo as default,
bar
}
wo mein Plugin wird die folgenden (? Äquivalent) Fussel Syntax kein Problem:
export default foo;
export const bar = ..;
beide Babel und Esprima analysieren ähnliche Syntax ohne Fehler, und das funktioniert für Code Babel an beiden Enden (Import und Export).
Allerdings bin ich nicht davon überzeugt, die spec die ehemalige export { x as default }
Form ermöglicht:
Für jeden
IdentifierName
n
inReferencedBindings
vonExportClause
: Es ist ein Syntaxfehler, wenn String von n ein ReservedWord ist oder wenn der String von n ist eins von: "implements", "interface", "let", "package", "privat", "protected", "public", "static" oder "yield".
ReservedWord
does include default
, obwohl ich man könnte denken, argumentieren, dass ReferencedBindings
specifically to the module-local identifier names bezieht, die exportiert werden (das heißt foo
) und nicht der exportierte Name selbst.
Es scheint im Allgemeinen auch eine komische Sache zu sein, reservierte Wörter zu exportieren; Babel wird so etwas wie
glücklich auch// ./foo.js
export { foo as yield }
// ./mod.js
import { yield as nonReservedIdentifier } from './foo'
So in der Zusammenfassung erlaubt: ist export { foo as default }
eine gültige Weise eine Standard in ES2015 zu exportieren?
In diesem Fall ist "default" ein benannter Export namens 'default' oder der tatsächliche' default' Export? –
Ich denke, die [Import Spec] (http://www.ecma-international.org/ecma-262/6.0/#sec-static-semantics-importetriesformodule) schlägt vor, dass es beides ist. –
Ja, der Standard-Export ist nur eine exportierte Bindung mit dem Namen 'default'. Es ist sozusagen, abgesehen davon, dass es eine spezielle Syntax zum Exportieren/Importieren von Standardexporten gibt, und "Standard" ist andernfalls eine ungültige lokale Kennung. – Bergi