2015-04-02 11 views
64

Ho una grande quantità di file javascript suddivisi in 4 sottodirectory nella mia app. In grugnito li afferro tutti e li compilo in un unico file. Questi file non hanno una funzione module.exportsCome caricare tutti i file in una sottodirectory usando il webpack senza richiedere istruzioni

Voglio usare il webpack e dividerlo in 4 parti. Non voglio entrare manualmente e richiedere tutti i miei file.

Mi piacerebbe creare un plug-in che sulla compilazione passi gli alberi delle directory, quindi afferra tutti i nomi e i percorsi dei file .js, quindi richiede tutti i file nelle sottodirectory e lo aggiunge all'output.

Voglio tutti i file in ogni directory compilati in un modulo che potrei quindi richiedere dal mio file del punto di ingresso, o includere nelle risorse che menziona http://webpack.github.io/docs/plugins.html.

Quando si aggiunge un nuovo file, voglio solo inserirlo nella directory corretta e sapere che sarà incluso.

C'è un modo per farlo con webpack o un plugin che qualcuno ha scritto per fare questo?

risposta

78

Questo è quello che ho fatto per raggiungere questo obiettivo:

function requireAll(r) { r.keys().forEach(r); } 
requireAll(require.context('./modules/', true, /\.js$/)); 
+0

C'è un modo per specificare quale caricatore usare? Il mio caso d'uso è che voglio usare 'image-size-loader' per tutte le immagini al fine di creare segnaposto con proporzioni corrette. – bobbaluba

+7

potresti fornire esempi di lavoro webpack.config.js –

+1

Questo ha funzionato perfettamente per me. Grazie @splintor –

35

Nel mio file app che ha finito per mettere il richiedono

require.context(
    "./common", // context folder 
    true, // include subdirectories 
    /.*/ // RegExp 
)("./" + expr + "") 

per gentile concessione di questo post: https://github.com/webpack/webpack/issues/118

Ora è l'aggiunta di tutti i miei file. Ho un caricatore per html e css e sembra funzionare alla grande.

+25

Che cosa è "espr" in questo esempio? – twiz

+2

'expr' è un percorso per un singolo file all'interno della cartella di contesto. quindi se è necessario farlo non solo per richiedere tutti i file html, questo è utile. https://webpack.github.io/docs/context.html#context-module-api – mkoryak

+15

non mi è ancora chiaro cosa stia facendo l'argomento basato su 'expr' anche dopo aver esaminato i documenti del webpack. cosa significa "fai questo non solo per richiedere tutti i file html"? grazie – mikkelrd

1

Come su una mappa di tutti i file in una cartella?

// { 
// './image1.png': 'data:image/png;base64,iVBORw0KGgoAAAANS', 
// './image2.png': 'data:image/png;base64,iVBP7aCASUUASf892', 
// } 

fare questo:

const allFiles = (ctx => { 
    let keys = ctx.keys(); 
    let values = keys.map(ctx); 
    return keys.reduce((o, k, i) => { o[k] = values[i]; return o; }, {}); 
})(require.context('./path/to/folder', true, /.*/)); 
+0

Grazie lasciando cadere questo esempio. Ho usato map semplicemente restituire il valore che ognuno dei miei file ha esportato =). –

1

questo funziona per me:

function requireAll(r) { r.keys().forEach(r); } 

requireAll(require.context('./js/', true, /\.js$/)); 

NOTA: questo può richiedere i file .js nella sottodirectory di ./js/ in modo ricorsivo.

Problemi correlati