Tengo una librería de la biblioteca node.js escrita en ES6 (comstackda con Babel ) en la que exporto los siguientes 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 desde mi proyecto principal incluyo la biblioteca de esta manera
import * as lib from 'lib'; console.log(lib);
Puedo ver el resultado correcto y funciona como se esperaba { config: ... }
. Sin embargo, si trato de include la biblioteca de esta manera:
import lib from 'lib'; console.log(lib);
será undefined
¿Alguien puede explicar lo que está sucediendo aquí? ¿No se supone que los dos methods de import son equivalentes? Si no, ¿qué diferencia me estoy perdiendo?
import * as lib from 'lib';
está pidiendo un object con todas las exportaciones nombradas de 'lib'.
export var config = _config; export var db = _db; export var storage = _storage;
se llaman exportaciones, por lo que terminas con un object como tú.
import lib from 'lib';
está pidiendo la export default
de lib
. p.ej
export default 4;
haría lib === 4
. No recupera las exportaciones nombradas. Para get un object de la export pnetworkingeterminada, tendrías que hacer explícitamente
export default { config: _config, db: _db, storage: _storage };
Solo agregué a la solución de Logan porque entender la import con corchetes, * y sin resolver un problema para mí.
import * as lib from 'lib';
es el equivalente de:
import {config, db, storage} as lib from 'lib';
Donde el * es similar a un comodín que importa toda la export var
de lib.
export var config; export var db; export var storage;
Alternativamente, usando:
import lib from 'lib';
Le permite acceder solo a la export pnetworkingeterminada:
// lib.js export default storage;
El uso de {} también solo importa componentes específicos del module, lo que networkinguce la huella con bundlers como Webpack.
Mientras:
import storage, { config, db } from './lib'
importaría todos los modules, incluido export default storage;
Ver la respuesta de Dan Abramov: ¿ Cuándo debo usar llaves para importar ES6?