Я пытаюсь импортировать материал-интерфейс в моем React приложение с использованием System.JSКак мне отобразить ./[module] в /[module]/[module].js в System.JS?
В моем приложении, я делаю это:
import {AppBar, Tabs, Tab, Card, CardTitle} from 'material-ui';
Вот мой System.JS конфигурации:
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 не имеет никаких проблем с этим макетом, поэтому, когда я связать мое приложение с помощью browserify просто позвонив по телефону browserify('./path/to/root/index.js')
, все материально-щий модули импортируются без каких-либо проблем.
Настоящая проблема заключается в том, что SystemJS не поддерживает разрешение узла. Я думаю, что они планируют добавить его, но теперь такие вещи, как Browserify и Webpack, могут делать такие вещи из коробки. Есть ли причина, по которой вам нужно использовать SystemJS? – Menello
@Menello: вообще нет причины, кроме того, что я только знаком с способностью Browserify делать пакеты (так я фактически использую его в своей системе) и вообще не знаком с Webpack. Я находился под впечатлением, что SystemJS может анализировать 'package.json' в модулях. То, что мне нужно, - это использовать отдельные пакеты из 'node_modules' и исходного дерева без необходимости связывать их в течение цикла разработки, чтобы я мог взломать пакет в' node_modules' на месте, обновить и мгновенно увидеть, что происходит, не связывая все это. Я не буду использовать System.JS в производстве. – Quassnoi
Если вы обслуживаете папку с узлами модулей, вы можете просто добавить к ней тег сценария: ''? Достаточно ли этого? – Menello