ES6 variables à l'importation du nom de dans node.js?
est-il possible d'importer quelque chose dans le module fournissant le nom de la variable lors de l'utilisation ES6 importation?
I. e. Je veux pour l'import de module à l'exécution en fonction des valeurs fournies dans une config:
import something from './utils/' + variableName;
- Avez-vous l'essayer?
- oui, le compilateur génère et Webstorm montre aussi une erreur
Vous devez vous connecter pour publier un commentaire.
Pas avec le
import
déclaration.import
etexport
sont définis de telle manière qu'ils sont statiquement analysable, de sorte qu'ils ne peuvent pas compter sur les informations d'exécution.Vous êtes à la recherche pour le loader API (polyfill), mais je suis un peu confus au sujet de l'état de la spécification:
En plus de Felix répondre, je note explicitement que ce n'est actuellement pas autorisée par la ECMAScript 6 grammaire:
Un ModuleSpecifier ne peut être qu'un StringLiteral, pas tout autre type d'expression comme un AdditiveExpression.
const
string literal
s. Ils sont statiquement analysable, n'est-ce pas? Il serait de réutiliser l'emplacement d'une dépendance d'une possibilité. (par exemple, l'importation d'un modèle et à la fois le modèle et l'emplacement du modèle disponible).Alors que ce n'est pas réellement une dynamique d'importation (par exemple, dans ma situation, tous les fichiers, je suis d'importation ci-dessous seront importés et regroupés par webpack, n'est pas sélectionnée au moment de l'exécution), un modèle que j'ai été en utilisant ce qui peut aider dans certains cas:
ou alternativement:
Je ne pense pas que je peux revenir à un défaut aussi facilement avec
require()
, qui renvoie une erreur si j'essaie d'importer la construction d'un chemin d'accès au modèle qui n'existe pas.De bons exemples et des comparaisons entre le besoin et l'importation peut être trouvé ici: http://www.2ality.com/2014/09/es6-modules-final.html
Une excellente documentation sur la re-exportation à partir de @iainastacio:
http://exploringjs.com/es6/ch_modules.html#sec_all-exporting-styles
Je suis intéressé à entendre les commentaires sur cette approche 🙂
Il y a une nouvelle spécification de ce qui est appelé un dynamique d'importation pour ES modules.
Fondamentalement, il vous suffit d'appeler
import('./path/file.js')
et votre bon pour aller. La fonction renvoie une promesse, qui se résout avec le module si l'importation a réussi.Cas d'utilisation
Cas d'utilisation comprennent itinéraire en fonction de la composante de l'importation pour Réagir, Vue etc et la capacité de lazy load modules, une fois qu'ils sont tenus au cours de l'exécution.
Plus D'Informations
Ici, c'est une explication sur Les Développeurs De Google.
La compatibilité du navigateur
Selon MDN il est pris en charge par chaque navigateur chromium et Firefox 66 derrière un drapeau.
vous pouvez utiliser la non-ES6 notation de le faire. c'est ce qui a fonctionné pour moi:
J'ai de moins en moins cette syntaxe, mais il travail:
au lieu d'écrire
utiliser cette syntaxe:
Je comprends la question spécifiquement demandé ES6
import
dans Node.js mais ce qui suit peut aider d'autres personnes recherchant une solution générique:Remarque: si vous importez un ES6 module et de la nécessité d'accéder à la
default
export, vous aurez besoin d'utiliser l'une des opérations suivantes:Vous pouvez également utiliser déstructuration avec cette approche qui peut ajouter plus de la syntaxe de la familiarité avec votre autres importations:
Malheureusement, si vous souhaitez accéder à
default
ainsi que la déstructuration, vous devez effectuer cette opération en plusieurs étapes:Je voudrais faire comme ceci
Dynamique import() (disponible en Chrome 63+) sera de faire votre travail. Voici comment: