javascript - instead - ¿Diferencia entre importar X e importar*como X en node.js(ES6/Babel)?
nodejs es6 module (3)
Solo agrego a Logan''s solución Logan''s porque entender la importación con paréntesis, * 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 * es similar a un comodín que importa todas las
export var
desde lib.
export var config;
export var db;
export var storage;
Alternativamente, usando:
import lib from ''lib'';
Le permite acceder solo a la exportación predeterminada:
// lib.js
export default storage;
El uso de {} también solo importa componentes específicos del módulo, lo que reduce la huella con los paquetes como Webpack.
Mientras:
import storage, { config, db } from ''./lib''
importaría todos los módulos, incluido
export default storage;
Vea la respuesta de Dan Abramov: ¿ Cuándo debo usar llaves para importar ES6?
Tengo una biblioteca de biblioteca node.js escrita en ES6 (compilada con Babel ) en la que exporto los siguientes submódulos:
"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 mi proyecto principal incluyo la biblioteca como esta
import * as lib from ''lib'';
console.log(lib);
Puedo ver la salida correcta y funciona como se esperaba
{ config: ... }
.
Sin embargo, si trato de incluir la biblioteca de esta manera:
import lib from ''lib'';
console.log(lib);
Será
undefined
.
¿Alguien puede explicar lo que está pasando aquí? ¿No se supone que los dos métodos de importación son equivalentes? Si no, ¿qué diferencia me estoy perdiendo?
import X from Y;
Es una sintaxis de azúcar.
import lib from ''lib'';
es igual a
import {default as lib } from ''lib'';
import * as lib from ''lib'';
está pidiendo un objeto con todas las exportaciones nombradas de ''lib''.
export var config = _config;
export var db = _db;
export var storage = _storage;
se denominan exportaciones, por lo que terminas con un objeto como lo hiciste.
import lib from ''lib'';
está solicitando la exportación
default
de
lib
.
p.ej
export default 4;
haría
lib === 4
.
No recupera las exportaciones nombradas.
Para obtener un objeto de la exportación predeterminada, tendría que hacer explícitamente
export default {
config: _config,
db: _db,
storage: _storage
};