Pourquoi devez exporter/importer des déclarations d'être au top niveau dans es2015?
J'ai commencé à utiliser es2015 avec babel en dernier projet. Quand j'essaie de faire import
ou export
à l'intérieur de if
condition, j'ai une erreur 'import' and 'export' may only appear at the top level
. Je vois beaucoup de causes pour cela et il fonctionne bien avec require
, mais pas avec es2015 modules. Est-il une raison pour que cette limitation?
- Parce que es2015 modules de façon synchrone chargé peut-être? Permettant imbriquée
export
s signifierait que l'exportation peut être différé jusqu'à ce que cette ligne est appelée - babel-eslint. stackoverflow.com/questions/39158552/...
Vous devez vous connecter pour publier un commentaire.
JavaScript effectue l'analyse statique sur l'ES6 modules. Cela signifie que vous ne pouvez pas effectuer dynamiquement les importations ou les exportations. Lire l'article 4.2 du présent article pour plus d'informations:
Il existe de nombreuses raisons pour cette approche, certains sont à préparer JavaScript pour de futures fonctionnalités qui dépendent de la capacité pour un fichier source pour être analysable de manière statique, à savoir macros et types (discuté dans l'article mentionné ci-dessus).
Un autre fait intéressant l'article sur ce sujet mentionne cyclique dépendances et rapide des recherches comme raisons.
______
Si vous souhaitez effectuer une
export
dans certains imbriquée bloc d'un module de reconsidérer la façon dont vous écrivez le module et l'exposition de ses Api/internals comme il est presque certainement pas nécessaire. Il en va de même si vous êtes actuellementrequire
ing modules à l'intérieur des blocs imbriqués dans votre ES5 code. Pourquoi ne pasrequire
/import
en haut de votre module et consommer leurs Api/internals dans les blocs imbriqués? Le principal avantage de cette approche, au moins à partir d'une lisibilité point de vue, c'est que vous pouvez connaître les dépendances d'un module sans avoir à scanner sa source pourrequire
appels.if
serait de requérir l'exécution.