Diferencia entre import X e import * como X en node.js (ES6 / Babel)?

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?