La différence entre l'importation X et d'importation * X dans node.js (ES6 / Babel)?
J'ai un node.js bibliothèque lib
écrit dans l'ES6 (compilé avec Babel) dans laquelle j'ai exporter les éléments suivants submodules:
"use strict";
import * as _config from './config';
import * as _db from './db';
import * as _storage from './storage';
export var config = _config;
export var db = _db;
export var storage = _storage;
Si de mon projet principal-je inclure la bibliothèque comme ce
import * as lib from 'lib';
console.log(lib);
Je peux voir le bon de sortie et il fonctionne comme prévu { config: ... }
. Cependant, si j'essaie d'inclure la bibliothèque comme ceci:
import lib from 'lib';
console.log(lib);
il sera undefined
.
Quelqu'un peut m'expliquer ce qui se passe ici? Ne sont pas les deux méthodes d'importation censé être équivalent? Si non, quelle différence est-ce qui me manque?
OriginalL'auteur left4bread | 2015-07-13
Vous devez vous connecter pour publier un commentaire.
demande pour un objet avec l'ensemble des exportations de 'lib'.
sont nommés les exportations, qui est pourquoi vous vous retrouvez avec un objet comme vous l'avez fait.
est demandé pour la
default
exportation delib
. par exemple,ferait
lib === 4
. Il ne ramène pas le nom des exportations. Pour obtenir un objet de l'exportation par défaut, vous devez explicitement neOriginalL'auteur loganfsmyth
Juste en ajoutant à Logan solution parce que la compréhension de l'importation avec des crochets, * et sans résolu un problème pour moi.
est l'équivalent de:
Où * est semblable à un générique que les importations de tous les
export var
de lib.Alternativement, à l'aide de:
Vous permet d'accéder à l'export par défaut:
À l'aide de {} aussi seulement les importations de composants spécifiques du module, ce qui réduit l'empreinte avec bundlers comme Webpack.
Tout:
voudrais importer tous les modules, y compris
export default storage;
Voir Dan Abramov de réponse:
Quand devrais-je utiliser des accolades pour ES6 d'importation?
import {…} as … from …
syntaxeÉdité. Vous avez raison, il n'y a pas de propagation de l'opérateur pour {...}, je devrais l'avoir utilisé, etc au lieu de cela.
(Bien sûr, il n'y a pas de propagation, du reste de la syntaxe, que ce n'est pas littéral d'objet/déstructuration). Il n'y a toujours pas de
{…} as …
syntaxe dans les importations, de sorte que "est le même que" est dénuée de sens. (Je ne pense pas que vous parliez de "génère la même erreur de syntaxe")C'est correct. Mise à jour de la réponse pour plus de clarté. J'ai utilisé "est le même que" parce que les petits mots sont plus accessibles. J'ai changé en "équivalent de" pour être plus précis.
Mais pouvez-vous expliquer ce que
import {config, db, storage} as lib from 'lib';
? Ce n'est pas décrite n'importe oùOriginalL'auteur tgrrr
import X from Y;
est une syntaxe de sucre.import lib from 'lib';
est égal à
import {default as lib } from 'lib';
OriginalL'auteur foxiris