2015-05-20 22 views
40

Questo funziona:Importare i moduli usando la sintassi ES6 e percorso dinamico

import app from './../app.js'; 

Ma questo non lo fa:

import app from path.join(process.cwd(), 'app'); 

sto ottenendo:

SyntaxError: /path/file.js: Unexpected token (5:16) 
> 5 | import app from path.join(process.cwd(), 'app'); 
    |    ^

E 'possibile (e/o come) utilizzare i percorsi "dinamici"? (non codificare il percorso o fare affidamento su percorsi relativi).

+0

E sì, il percorso viene importato prima dell'app. –

risposta

44

No, questo non è possibile. I moduli ES6 devono essere in grado di risolvere staticamente le loro dipendenze, senza eseguire il codice del modulo, in modo che le istruzioni import funzionino in modo affidabile. Lo specificatore del modulo deve essere una stringa letterale.

Tuttavia, il caricatore di moduli a scelta deve supportare il caricamento dinamico di moduli con nomi di variabili. Tuttavia, non sarebbe possibile ottenere un identificatore app associato all'ambito del modulo (e non è possibile riesportarlo), in genere sarebbe disponibile solo in un callback o così.

10

Le importazioni ES6 sono dichiarative e destinate all'analisi statica. Non possono essere dinamici.

In genere, se le importazioni condizionali fossero soggette a delle importazioni condizionali, sarebbe responsabilità della logica di risoluzione del percorso sottostante decidere quale modulo caricare in base a un percorso statico.

Quello o si utilizza il caricatore di modulo asincrono anziché le importazioni dichiarative.

Problemi correlati