2017-02-10 27 views
16

benim Tepki app içine malzeme ui içe çalışıyorum kullanarak System.JS benim app System.JS'deki /[module]/[module].js dosyasını nasıl değiştirebilirim?

, bunu yapıyorum:

:

import {AppBar, Tabs, Tab, Card, CardTitle} from 'material-ui'; 

İşte benim System.JS yapılandırma var

var _AppBar2 = require('./AppBar'); 

var _AppBar3 = _interopRequireDefault(_AppBar2); 

var _AutoComplete2 = require('./AutoComplete'); 

var _AutoComplete3 = _interopRequireDefault(_AutoComplete2); 

// ... etc, about 40 of them. 

exports.AppBar = _AppBar3.default; 
exports.AutoComplete = _AutoComplete3.default; 

// ... etc 
:
System.config({ 
    baseURL: '/node_modules', 
    packageConfigPaths: [ 
     '*/package.json' 
    ], 
    packages: { 
     '.': { 
      defaultExtension: 'js', 
      main: 'index.js' 
     }, 
    } 
}); 

O içindeki ithalat bir grup var node_modules/material-ui/index.js yükler Paketin ağaç yapısında

, bu modüllerin her biri şöyle kendi dizin altında depolanır:

material-ui/ 
    index.js 
    AppBar/ 
    AppBar.js 
    index.js -- just reexports './AppBar' 
    AutoComplete/ 
    AutoComplete.js 
    index.js -- just reexports './AutoComplete' 

vb material-ui/AppBar ithal etmek aslında o kadar, ben node_modules/material-ui/AppBar/AppBar.js veya node_modules/material-ui/AppBar/index.js yük System.JS gerekir.

Bunun yerine, System.JS burada olmayan node_modules/material-ui/AppBar.js yüklemeye çalışıyor. Ben packages altında her modül için ayrı girişler eklerseniz

:

'material-ui': { 
    map: { 
     './AppBar': './AppBar/AppBar.js' 
    } 
} 

çalıştığını, ancak joker:

'material-ui': { 
    map: { 
     './*': './*/*.js' 
    } 
} 

yok.

Belirli bir pakette System.JS haritasını ./*./*/*.js'a nasıl yapabilirim? Bir yan not olarak


, browserify bu düzen ile herhangi bir problem yok, bu yüzden sadece browserify('./path/to/root/index.js') arayarak browserify kullanarak app paket, tüm malzeme-ui modülleri sorunsuz bir şekilde aktarılmayan.

+0

Burada asıl sorun, SystemJS'nin Düğüm modülü çözünürlüğünü desteklememesidir. Bence bunu eklemeyi planlıyorlar, ama şimdi Browserify ve Webpack gibi şeyler kutunun dışında bir şeyler yapabilir. SystemJS'yi kullanmanız için herhangi bir sebep var mı? – Menello

+0

@Menello: Hiçbir sebep yok, sadece Browseri'nın demetleri yapma yeteneğini (sistemimde bu şekilde kullanıyorum) ve Webpack'i hiç tanımıyorum. SystemJS'nin modüllerdeki package.json'ı ayrıştırabileceği izlenimindeydim. Neyin peşindeyim, cycle node_modules' ve kaynak ağacından geliştirme döngüsünde bunları paketlemek zorunda kalmadan bireysel paketleri kullanabilmektir, böylece 'node_modules' içindeki bir paketi hackleyebilmem, yenilemeyi ve anında ne olduğunu görebilmem Her şeyi bir araya getirmek zorunda kalmadan olur. System.JS'yi üretimde kullanmayacağım. – Quassnoi

+0

Düğüm modülünüzün klasörünü sunuyorsanız, buna bir komut dosyası etiketi ekleyebilirsiniz: ''? Bu yeterli olur mu? – Menello

cevap

4

Wildcard yolları, System.js'de supported değil. El ile her modül için bir girdi eklemek gerekir: Ayrıca sizin için listesini oluşturmak için jspm kullanabilirsiniz

'material-ui': { 
    map: { 
    './AppBar': './AppBar/AppBar.js', 
    './AppHeader': './AppHeader/AppHeader.js', 
    './AppFooter': './AppFooter/AppFooter.js', 
    //etc 
    } 
} 

.

+1

Link verdiğiniz yorumun "map" ayarı değil "paths" ayarı hakkında olduğunu unutmayın. – Louis

+0

ah teşekkürler - – hackerrdave

+0

düzeltecek @hackerrdave: teşekkürler. Jspm' System.JS yapılandırmaları oluşturmak için bir araç mı? (evet gibi görünüyor, sadece belgelere açık değil). Bir dizi modülden ardı ardına yüklenen ve OP'de belirtildiği gibi sıfır konfigürasyonunda "browserify" ile çalıştırarak bir pakete dönüşebileceğim bir "index.js" dosyasına sahip olduğum için, jspm'yi nasıl kullanabilirim? yapılandırmayı oluştur – Quassnoi

İlgili konular