13

Guardando su Internet sono confuso con il file modulo "index.js" speciale.Moduli ES6 (EcmaScript 2015): import index.js

Utilizzando babelJS + nodeJS o Browserify/Webpack posso importare un modulo "index.js" all'interno di una directory "libs" utilizzando import myLib from "./libs" (es. Omettendo la parte /index o /index.js).

La risoluzione del modulo "index.js" (che specifica la cartella contenente) supportata dallo standard ufficiale dei moduli ES6 (EcmaScript 2015)? O è solo un comportamento di trascrizione NodeJS/CommonJS "personalizzato"?

Sarà possibile omettere lo /index | /index.js parte dell'importazione in tutti i browser (quando i moduli saranno supportati su tutti i browser)?

risposta

17

La risoluzione del modulo "index.js" (che specifica la cartella contenente) supportata dallo standard ufficiale dei moduli ES6 (EcmaScript 2015)?

No. ES2015 non contiene nulla sul caricatore di moduli o su come interpretare gli identificatori di modulo.


O è solo NodeJS "custom"/CommonJS transpiling comportamento?

Sì. È possibile leggere l'algoritmo di risoluzione del modulo nello documentation. La parte rilevante:

require(X) from module at path Y 
1. If X is a core module, 
    a. return the core module 
    b. STOP 
2. If X begins with './' or '/' or '../' 
    a. LOAD_AS_FILE(Y + X) 
    b. LOAD_AS_DIRECTORY(Y + X) 
3. LOAD_NODE_MODULES(X, dirname(Y)) 
4. THROW "not found" 

[...] 

LOAD_AS_DIRECTORY(X) 
1. If X/package.json is a file, 
    a. Parse X/package.json, and look for "main" field. 
    b. let M = X + (json main field) 
    c. LOAD_AS_FILE(M) 
2. If X/index.js is a file, load X/index.js as JavaScript text. STOP 
3. If X/index.json is a file, parse X/index.json to a JavaScript object. STOP 
4. If X/index.node is a file, load X/index.node as binary addon. STOP 

Intende essere possibile omettere la parte /index|/index.js di importazione in tutti i browser e (quando i moduli saranno supportati su tutti i browser)?

Speriamo che l'implementazione del browser mirerà alla massima compatibilità con i caricatori di moduli esistenti, ma per ora non lo sappiamo. Forse non ha nulla a che fare con il browser, ma con il modo in cui server risolve gli identificatori dei moduli. Confesso che non ho seguito lo sviluppo ultimamente, quindi qualsiasi altro approfondimento è molto apprezzato :)

+0

Grande! Grazie, bello saperlo – Zorgatone