2017-02-10 5 views
16

मैं अपने प्रतिक्रिया एप्लिकेशन में आयात करने के लिए सामग्री-ui कोशिश कर रहा हूँ System.JS का उपयोग करमैं ./[module] को /[module]/[module].js को 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 
,210

पैकेज के वृक्ष संरचना में, इन मॉड्यूल में से प्रत्येक के इस तरह अपनी निर्देशिका के तहत संग्रहीत किया जाता है:

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') फोन करके, सभी सामग्री-ui मॉड्यूल किसी भी मुद्दे के बिना आयात मिलता है।

+0

असली मुद्दा यह है कि SystemJS नोड मॉड्यूल रिज़ॉल्यूशन का समर्थन नहीं करता है। मुझे लगता है कि वे इसे जोड़ने की योजना बना रहे हैं, लेकिन अब ब्राउज़र और वेबपैक जैसी चीजें बॉक्स की तरह सामान कर सकती हैं। क्या SystemJS का उपयोग करने के लिए आपको कोई कारण है? – Menello

+0

@ मेनेलो: बिलकुल भी कोई कारण नहीं है, सिवाय इसके कि मैं केवल ब्राउज़र की क्षमता को बंडल करने की क्षमता से परिचित हूं (इस तरह मैं वास्तव में इसे अपने सिस्टम में उपयोग करता हूं) और वेबपैक से बिल्कुल परिचित नहीं हूं। मैं इंप्रेशन के तहत था सिस्टमजेएस मॉड्यूल में 'package.json' पार्स कर सकता था। मैं जो हूं उसके बाद 'node_modules' से अलग-अलग पैकेजों का उपयोग करने और स्रोत चक्र को विकास चक्र के दौरान उन्हें बंडल किए बिना उपयोग करने में सक्षम होना है, ताकि मैं जगह में' node_modules' में एक पैकेज को हैक कर सकूं, ताज़ा कर सकूं और तुरंत देख सकूं पूरी चीज को बंडल किए बिना होता है। मैं उत्पादन में System.JS का उपयोग नहीं करने जा रहा हूँ। – Quassnoi

+0

आप अपने नोड मॉड्यूल की सेवा कर रहे हैं तो आप सिर्फ यह करने के लिए एक स्क्रिप्ट टैग जोड़ सकते हैं फ़ोल्डर: ''? क्या वह पर्याप्त होगा? – Menello

उत्तर

4

वाइल्डकार्ड पथ supported सिस्टम.जेएस में नहीं हैं। आप मैन्युअल रूप से प्रत्येक मॉड्यूल के लिए एक प्रविष्टि जोड़ने के लिए करना होगा:

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

तुम भी jspm का उपयोग आप के लिए है कि सूची बनाने के लिए कर सकते हैं।

+1

ध्यान दें कि जिस लिंक से आप लिंक करते हैं वह 'पथ' सेटिंग के बारे में बात कर रहा है, न कि 'मानचित्र' सेटिंग। – Louis

+0

आह धन्यवाद - – hackerrdave

+0

@hackerrdave को ठीक करेगा: धन्यवाद। System.JS कॉन्फ़िगरेशन उत्पन्न करने के लिए 'jspm' टूल है? (हाँ की तरह लगता है, यह दस्तावेज से मुझे स्पष्ट नहीं है)। यह देखते हुए कि मेरे पास 'index.js' फ़ाइल है जो मॉड्यूल का एक गुच्छा लोड करती है और जिसे मैं ओपी में उल्लिखित शून्य कॉन्फ़िगरेशन के साथ' ब्राउज़रइफ़ 'के माध्यम से चलाकर एक बंडल में परिवर्तित कर सकता हूं, मैं' jspm' का उपयोग कैसे करूं कॉन्फ़िगरेशन उत्पन्न करें? – Quassnoi

संबंधित मुद्दे