2016-06-14 20 views
6

ı buWeb pakette birden çok dinamik giriş komut dosyası var mı?

app/ 
    modules/ 
     module1/ 
     <other files> 
     script.js 
     module2/ 
     <other files> 
     script.js 
     module3/ 
     <other files> 
     script.js 
    lib/ 
     <some common/shared scripts to import from> 
public/ 
    js/ 

gibi bir uygulama yapısına sahip, söylememe izin ver nasıl bir araya getirmek WebPack ve çıkış yapılandırabilir her script.js böyle bir yapıya (ortak lib klasörden çeşitli kütüphaneleri/yardımcı programları ithal edilecek olan)?

örn.

public/js/module1/script.js 
public/js/module2/script.js 

Her giriş dosyasını tek tek tanımlamaksızın? Gulp gibi bir şey /**/*.js sözdizimi ile yapar?

Yeni bir modül/bileşen eklediğimde, amacım webpack.config.js dosyamı korumak zorunda değil.

+3

Webpack yapılandırma dosyası JavaScript'dir. Dizin yapısını okuyabilir ve istenen yolları oluşturabilirsiniz. –

+0

Nasıl olduğunu öğrendin mi? – chh

cevap

0

Küre paketine ihtiyacınız var ve webpack.config.js ürününüze entry ve output ayarlarını yapmalısınız. Örnek, webpack.config.js kök dizinindedir.

var webpack = require('webpack'); 
var glob = require('glob'); 

//Generate object for webpack entry 
//rename './app/modules/module1/script.js' -> 'module1/script' 
var entryObject = glob.sync('./app/modules/**/script.js').reduce(
    function (entries, entry) { 
     var matchForRename = /^\.\/app\/modules\/([\w\d_]+\/script)\.js$/g.exec(entry); 

     if (matchForRename !== null && typeof matchForRename[1] !== 'undefined') { 
      entries[matchForRename[1]] = entry; 
     } 

     return entries; 
    }, 
    {} 
); 

module.exports = { 
    ... 
    entry: entryObject,//{'moduleName/script': './app/modules/moduleName/script.js', ...} 
    output: { 
     path: __dirname + '/public/js', 
     filename: '[name].js'//'moduleName/script.js', [name] - key from entryObject 
    } 
    ... 
}; 

" 'fs' çözemezse" gibi fs hatayı olacaksa diğer entryObject kullanarak kamu script.js içine <other files> dosyalarınızı bir araya getirebilirsiniz seçeneği hem

node: { 
    fs: "empty" 
} 

eklemek .

var entryObject = glob.sync('./app/modules/**/*.js').reduce(
    function (entries, entry) { 
     var matchForRename = /^\.\/app\/modules\/([\w\d_]+)\/.+\.js$/g.exec(entry); 

     if (matchForRename !== null && typeof matchForRename[1] !== 'undefined') { 
      var entryName = matchForRename[1] + '/script'; 

      if (typeof entries[entryName] !== 'undefined') { 
       entries[entryName].push(entry); 
      } else { 
       entries[entryName] = [entry]; 
      } 

     } 

     return entries; 
    }, 
    {} 
); 
İlgili konular