web-dev-qa-db-fra.com

Comment importer tout ce qui est exporté d'un fichier avec la syntaxe ES2015? Y a-t-il un joker?

Avec la syntaxe ES2015, nous avons la nouvelle syntaxe d'importation, et j'essaie de comprendre comment importer tout ce qui est exporté d'un fichier dans un autre, sans le placer dans un objet, par exemple. disponibles comme s'ils étaient définis dans le même fichier.

Donc, essentiellement, ceci:

// constants.js

const MYAPP_BAR = 'bar'
const MYAPP_FOO = 'foo'
// reducers.js

import * from './constants'

console.log(MYAPP_FOO)

Cela ne fonctionne pas, du moins selon ma configuration Babel/Webpack, cette syntaxe n'est pas valide.

Des alternatives

Cela fonctionne (mais est long et ennuyant si vous avez besoin de plus que quelques choses importées):

// reducers.js

import { MYAPP_BAR, MYAPP_FOO } from './constants'

console.log(MYAPP_FOO)

Comme cela (mais cela enveloppe les consts dans un objet):

// reducers.js

import * as consts from './constants'

console.log(consts.MYAPP_FOO)

Existe-t-il une syntaxe pour la première variante ou devez-vous importer chaque élément par son nom ou utiliser l'objet wrapper?

22
mikl

Y a-t-il une syntaxe pour la première variante,

Non.

ou devez-vous importer chaque chose par son nom ou utiliser l'objet wrapper?

Oui.

17
Felix Kling

Vous ne pouvez pas importer toutes les variables par un caractère générique pour la première variante car cela provoque des variables conflictuelles si vous l'avez avec le même nom dans des fichiers différents.

//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?

Parce qu'ici nous ne pouvons pas résoudre la valeur réelle de MY_VAR, ce type d'importation n'est pas possible.

Pour votre cas, si vous avez beaucoup de valeurs à importer, il sera préférable de les exporter toutes en tant qu'objet:

// reducers.js

import * as constants from './constants'

console.log(constants.MYAPP_FOO)
26
just-boris

Bien sûr il y a.

Il suffit d'utiliser codegen.macro

codegen
      'const { ' + Object.keys(require('./path/to/file')).join(',') + '} = require("./path/to/file");

Mais il semble que vous ne pouvez pas importer de variable générée par codegen . https://github.com/kentcdodds/babel-plugin-codegen/issues/10

0
林东吴