Как сопоставить. /[module] с/[module]/[module].js в System.JS?
Я пытаюсь импортировать материал-ui в свое приложение React с помощью System.JS
В моем приложении я делаю это:
import {AppBar, Tabs, Tab, Card, CardTitle} from 'material-ui';
Здесь мой System.JS config:
System.config({
baseURL: '/node_modules',
packageConfigPaths: [
'*/package.json'
],
packages: {
'.': {
defaultExtension: 'js',
main: 'index.js'
},
}
});
Он загружает node_modules/material-ui/index.js
, у которого есть куча импорта внутри него:
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
В структуре дерева пакетов каждый из этих модулей хранится в его собственном каталоге следующим образом:
material-ui/
index.js
AppBar/
AppBar.js
index.js -- just reexports './AppBar'
AutoComplete/
AutoComplete.js
index.js -- just reexports './AutoComplete'
и т.д., поэтому на самом деле для импорта material-ui/AppBar
мне нужна System.JS для загрузки node_modules/material-ui/AppBar/AppBar.js
или node_modules/material-ui/AppBar/index.js
.
Вместо этого System.JS пытается загрузить node_modules/material-ui/AppBar.js
, которого нет.
Если я добавляю отдельные записи для каждого модуля в packages
:
'material-ui': {
map: {
'./AppBar': './AppBar/AppBar.js'
}
}
он работает, однако подстановочные знаки:
'material-ui': {
map: {
'./*': './*/*.js'
}
}
нет.
Как мне сделать карту System.JS ./*
в ./*/*.js
под определенным пакетом?
В качестве побочного примечания браузер не имеет никаких проблем с этим макетом, поэтому, когда я собираю свое приложение, используя браузер, просто вызывая browserify('./path/to/root/index.js')
, все материальные модули ui импортируются без каких-либо проблем.
Ответы
Ответ 1
Подстановочные пути не поддерживается в System.js. Вам нужно будет вручную добавить запись для каждого модуля:
'material-ui': {
map: {
'./AppBar': './AppBar/AppBar.js',
'./AppHeader': './AppHeader/AppHeader.js',
'./AppFooter': './AppFooter/AppFooter.js',
//etc
}
}
Вы также можете использовать jspm для создания этого списка.