módulo - javascript import js
¿Cómo importar todo lo exportado desde un archivo con sintaxis ES2015? ¿Hay un comodín? (3)
¿Hay una sintaxis para la primera variante,
No.
o ¿tienes que importar cada cosa por nombre o usar el objeto de envoltura?
Sí.
Con la sintaxis de ES2015, tenemos la nueva sintaxis de importación, y he estado tratando de averiguar cómo importar todo lo exportado de un archivo a otro, sin tenerlo envuelto en un objeto, es decir. Disponible como si estuvieran definidos en el mismo archivo.
Así que, esencialmente, esto:
// constants.js
const MYAPP_BAR = ''bar''
const MYAPP_FOO = ''foo''
// reducers.js
import * from ''./constants''
console.log(MYAPP_FOO)
Esto no funciona, al menos según mi configuración de Babel / Webpack, esta sintaxis no es válida.
Alternativas
Esto funciona (pero es largo y molesto si necesita más de un par de cosas importadas):
// reducers.js
import { MYAPP_BAR, MYAPP_FOO } from ''./constants''
console.log(MYAPP_FOO)
Al igual que esto (pero envuelve las constantes en un objeto):
// reducers.js
import * as consts from ''./constants''
console.log(consts.MYAPP_FOO)
¿Hay una sintaxis para la primera variante, o tiene que importar cada cosa por nombre o usar el objeto de envoltura?
Claro que hay.
Solo usa codegen.macro
codegen
''const { '' + Object.keys(require(''./path/to/file'')).join('','') + ''} = require("./path/to/file");
Pero parece que no se puede importar la variable generada por codegen. https://github.com/kentcdodds/babel-plugin-codegen/issues/10
No puede importar todas las variables por comodín para la primera variante porque causa variables conflictivas si las tiene con el mismo nombre en diferentes archivos.
//a.js
export const MY_VAR = 1;
//b.js
export const MY_VAR = 2;
//index.js
import * from ''./a.js'';
import * from ''./b.js'';
console.log(MY_VAR); // which value should be there?
Como aquí no podemos resolver el valor real de MY_VAR
, este tipo de importación no es posible.
Para su caso, si tiene muchos valores para importar, será mejor exportarlos todos como objeto:
// reducers.js
import * as constants from ''./constants''
console.log(constants.MYAPP_FOO)