2016-05-16 11 views
7

कई आधुनिक जावास्क्रिप्ट पुस्तकालय मोनोलिथ से मॉड्यूलरकृत एनपीएम पैकेज में अपडेट कर रहे हैं; कुछ उदाहरण lodash और d3 हैं।ईएस 6 आयात में विलय या घोंसला संभव है?

बिल्ड आकार को बनाए रखने के मामले में यह बहुत अच्छा है, लेकिन आयात के साथ थोड़ी अजीबता के लिए बनाता है। जब पूरी लाइब्रेरी लोड हो रहा है, मैं लिखने:

import d3 from 'd3'; 

let csv = d3.csv()... 
let xScale = d3.scale()... 

जब पूरे पैकेज के बजाय व्यक्तिगत मॉड्यूल लोड हो रहा है, मैं लिखने:

import d3_scale from 'd3-scale'; 
import d3_request from 'd3-request'; 

let csv = d3_request.csv()... 
let xScale = d3.scale.scaleLinear()... 

वहाँ एक वाक्य रचना है कि मुझे मैं अपने आयात विलय करने के लिए इतना है की अनुमति होगी एक ही ऑब्जेक्ट से प्रत्येक पैकेज से सभी फ़ंक्शन कॉल कर सकते हैं (उदाहरण के लिए d3.csv(), d3.scaleLinear())?

+0

उन सभी को एक ही ऑब्जेक्ट पर प्राप्त करके क्या प्राप्त किया जाएगा? स्वतंत्र चीजों को अलग रखना बिंदु की तरह है। – loganfsmyth

+0

आपको "* लिखना है ... *" क्यों? आप पूरे पैकेज को आयात कर सकते हैं – Amit

+0

@ जैसा कि मैंने अपने प्रश्न में बताया है, मैं सभी 'd3' आयात नहीं करना चाहता क्योंकि यह एक बड़ा पैकेज है और मैं इसके निर्माण का आकार केवल इसके उप-समूह को आयात करके रख सकता हूं। – ericsoco

उत्तर

5

जैसा कि मैं सवाल लिख रहा था, मैंने जवाब निकाला। स्व रबर पूर्ण रूप से भीगना।

spread operator यहाँ बहुत सभ्य दिखता है:

import * as d3_request from 'd3-request'; 
import * as d3_scale from 'd3-scale'; 
const d3 = { 
    ...d3_request, 
    ...d3_scale 
}; 

d3.csv('path/to.csv', (error, data) => { 
    let xScale = d3.scale()... 
}); 
+0

क्या यह बेहतर प्रारूपित करना संभव है? डबल-स्लैश के साथ क्या है? – Ringo

+4

यह 'const d3 = Object.assign ({}, d3_request, d3_scale)' है। ES6 फैलता है पुनरावृत्तियों के लिए, और वस्तुओं को नहीं हैं। [ऑब्जेक्ट फैलता है] (https://github.com/sebmarkbage/ecmascript-rest-spread) चरण 2 प्रस्ताव है। – estus

+0

@estus यह ठीक है, मैं एक ईएस 6-विशिष्ट उत्तर की तलाश नहीं कर रहा हूं, मैं एक ऐसे उत्तर की तलाश में हूं जो मेरी बिल्ड पाइपलाइन (Babel.js) में काम करता है। तो ईएस 7 विकल्प मेरे लिए काम करते हैं। लेकिन कृपया इसे एक अलग उत्तर के रूप में लिखने के लिए स्वतंत्र महसूस करें और मैं ऊपर उठ जाऊंगा। – ericsoco

2

एक और तरीका है इस

तरह यह करने के लिए है एक फ़ाइल d3-modules.js बनाएँ:

export * from 'd3-request'; 
export * from 'd3-scale'; 

और फिर आयात कि फ़ाइल जहां आपको इसकी आवश्यकता है:

import * as d3 from "./d3-modules.js"; 

यह वास्तव में है कि कैसे d3 स्वयं इसे कर रहे हैं: https://github.com/d3/d3/blob/635d44786dd4322d0c89dd98546bff91d7cce0fe/index.js

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