próbuję zaimportować materiał-ui do mojego React aplikacji wykorzystujące System.JSJak mapować ./[module] na /[module]/[module].js w System.JS?
W mojej aplikacji, to robię:
import {AppBar, Tabs, Tab, Card, CardTitle} from 'material-ui';
Oto mój System.JS config:
System.config({
baseURL: '/node_modules',
packageConfigPaths: [
'*/package.json'
],
packages: {
'.': {
defaultExtension: 'js',
main: 'index.js'
},
}
});
ładuje node_modules/material-ui/index.js
który ma kilka importu wewnątrz niego:
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
w drzewo struktury pakietu, każdy z tych modułów jest przechowywany pod własnym katalogu tak:
material-ui/
index.js
AppBar/
AppBar.js
index.js -- just reexports './AppBar'
AutoComplete/
AutoComplete.js
index.js -- just reexports './AutoComplete'
, itd., Więc w rzeczywistości importować material-ui/AppBar
muszę System.JS załadować node_modules/material-ui/AppBar/AppBar.js
lub node_modules/material-ui/AppBar/index.js
.
Zamiast tego System.JS próbuje załadować node_modules/material-ui/AppBar.js
, którego tam nie ma.
Jeśli dodać poszczególne wpisy dla każdego modułu pod packages
:
'material-ui': {
map: {
'./AppBar': './AppBar/AppBar.js'
}
}
to działa, jednak symbole wieloznaczne:
'material-ui': {
map: {
'./*': './*/*.js'
}
}
nie.
Jak utworzyć Mapę System.JS ./*
na ./*/*.js
w ramach określonej paczki?
Na marginesie, browserify nie ma żadnych problemów z tego układu, więc kiedy połączą mojej aplikacji przy użyciu browserify prostu dzwoniąc browserify('./path/to/root/index.js')
, wszystkie moduły materiałowe-ui dostać importowane bez żadnych problemów.
Prawdziwym problemem jest to, że SystemJS nie obsługuje rozdzielczości modułu Node. Myślę, że planują dodać to, ale na razie takie rzeczy jak Browserify i Webpack mogą robić takie rzeczy po wyjęciu z pudełka. Czy jest jakiś powód, dla którego musisz użyć SystemJS? – Menello
@Menello: nie ma żadnego powodu, z wyjątkiem tego, że znam tylko zdolność przeglądarki Browserify do tworzenia pakietów (tak naprawdę używam go w moim systemie) i wcale nie znam się na pakiecie Webpack. Byłem pod wrażeniem SystemJS mógł przetworzyć 'pakiet.json' w modułach. To, czego szukam, to móc używać pojedynczych pakietów z 'node_modules' i drzewa źródłowego bez konieczności pakowania ich w trakcie cyklu rozwoju, tak, żebym mógł zhackować pakiet w' node_modules' w miejscu, odświeżyć i natychmiast zobaczyć co dzieje się bez konieczności pakowania całości. Nie zamierzam używać System.JS w produkcji. – Quassnoi
Jeśli obsługujesz folder modułów węzła, możesz dodać do niego znacznik skryptu: ''? Czy to wystarczy? – Menello