2016-09-25 7 views
6

मैं रोलअप और डी 3 संस्करण 4 के साथ शुरू कर रहा हूं, जो ES2015 मॉड्यूल में लिखा गया है। मैंने पारंपरिक डी 3 नेमस्पेस "डी 3" का उपयोग करके कुछ कोड लिखा है। अब मैं रोलअप का उपयोग कर कस्टम बंडल बनाना चाहता हूं। मैं पेड़-हिलाने का उपयोग करना चाहता हूं, क्योंकि शायद मैं केवल डी 3 में लगभग आधे कार्यों का उपयोग कर रहा हूं, और मैं चीजों को यथासंभव प्रकाश रखना चाहता हूं।ES2015 मॉड्यूल का चयन चुनिंदा रूप से कैसे करें, लेकिन नेमस्पेसिंग के साथ?

मैं स्पष्ट कर दिया कि मैं कार्यों चुनिंदा आयात कर सकते हैं, उदा .: हूँ

import {scaleLinear} from "d3-scale"; 
import { 
     event, 
     select, 
     selectAll 
} from "d3-selection"; 

उसी वर्बोज़ बहुत तेजी से प्राप्त करने के लिए, क्योंकि d3 के आधे कार्यों का एक बहुत कुछ है जा रहा है। में इसके साथ जी सकता हूँ। बड़ी समस्या यह है कि इसे नामस्थान के बिना मेरे सभी फ़ंक्शन पहचानकर्ताओं को पूरी तरह से फिर से लिखना होगा। मुझे इसकी परवाह नहीं है, क्योंकि मैं लाइब्रेरी कोड नामस्थान पसंद करना पसंद करता हूं।

मैं समझता हूँ कि मैं सभी मॉड्यूल के आयात कर सकते हैं:

import * as d3 from "d3"; 

जो d3 वस्तु नाम स्थान है, जो मेरी कोड संगठन के लिए अच्छा है बरकरार रखता है। लेकिन फिर रोलअप बंडल से अप्रयुक्त कार्यों को पेड़-शेक नहीं कर सकता है।

import { 
     event, 
     select, 
     selectAll 
} as d3 from "d3-selection"; 

लेकिन सुविधा की इस प्रकार की/वाक्य रचना कल्पना में मौजूद नहीं लगता है:

क्या मैं सपना देख रहा हूँ की तरह कुछ है। मैं दोनों मॉड्यूल के अलग-अलग हिस्सों को चुनिंदा रूप से लक्षित कैसे कर सकता हूं, और आयात के दौरान नेमस्पेसिंग को सुरक्षित रख सकता हूं?

+0

आप '*' आयात का उपयोग कर सकते हैं, और रोलअप उन्हें तब तक हिला देगा जब तक कि आप नामस्थान का उपयोग नहीं करते हैं (उदा। इसे किसी फ़ंक्शन में पास करना)। लेकिन पेड़-हिलना सही नहीं है (जावास्क्रिप्ट की प्रकृति के कारण) इसलिए सीधे 'डी 3' से आयात करने में अप्रयुक्त कोड शामिल होगा (हम इसे बेहतर बनाने पर काम कर रहे हैं), इसलिए आपको आवश्यक मॉड्यूल से चुनिंदा आयात करना हमेशा आपको देगा सबसे उच्च अनुकूलित बंडल। व्यक्तिगत रूप से मैं उन कार्यों को स्पष्ट रूप से आयात करने का पक्ष करता हूं जो मैं वास्तव में उपयोग कर रहा हूं, लेकिन अगर आप ऐसा नहीं करना चाहते हैं तो @estus का सही विचार है। –

+0

@RichHarris चुनिंदा आयात कैसे करता है (मुझे लगता है कि आप आयात नाम का मतलब है) नामस्थान ऑब्जेक्ट का उपयोग करके चुनिंदा रूप से अलग-अलग पेड़-हिलाने का कारण बनता है? – Bergi

+0

@ बर्गि क्योंकि तब आप अधिक आसानी से आयात कर सकते हैं उदा। 'd3-select',' d3-scale' et al, 'd3' –

उत्तर

4

आप उस के लिए एक फिर से निर्यात मॉड्यूल की जरूरत है:

export { 
     event, 
     select, 
     selectAll 
} from "d3-selection"; 

import * as d3 from './d3'; 
0

सुविधा की इस प्रकार की/वाक्य रचना कल्पना में मौजूद नहीं लगता

नहीं, यह वास्तव में असंभव है। एक बार मॉड्यूल शामिल होने के बाद, पूरे मॉड्यूल का मूल्यांकन और समावेश किया जाता है, इसलिए आंशिक समावेशन की आवश्यकता नहीं है। एक नेमस्पेस ऑब्जेक्ट हमेशा मॉड्यूल के सभी गुणों तक पहुंच की अनुमति देता है।

लेकिन फिर रोलअप बंडल से अप्रयुक्त कार्यों को पेड़-शेक नहीं कर सकता है।

कि रोलअप की गलती होगी, लेकिन वास्तव में यह स्थिर नाम स्थान वस्तु के उपयोगों के लिए कोड का विश्लेषण, और यह पता लगाने जो गुण उपयोग किया जाता है करने में सक्षम है। इस ऑप्टिमाइज़ेशन को जमानत की आवश्यकता हो सकती है यदि ऑब्जेक्ट का उपयोग किसी भी ऐसे व्यक्ति के लिए किया जाता है जो बिंदीदार सदस्य पहुंच नहीं है, लेकिन आम तौर पर यह काफी संभव है। यदि यह अपेक्षित काम नहीं कर रहा है, तो आप एक बग रिपोर्ट दर्ज करना चाहेंगे (troubleshooting भी देखें)।

+0

रोलअप किसी भी अन्य की तरह फू-बयान 'आयात * के रूप में * आयात * कर सकते हैं - बस जब तक आप नामस्थान का उपयोग इस तरह से नहीं करते हैं जिससे इसे' संशोधित 'किया जा सकता है (उदाहरण के लिए इसे किसी फ़ंक्शन में पास करना) –

+0

@ रिचहरिस हाँ, यही मेरा मतलब था। (मुझे लगता है कि मुझे दस्तावेज़ों को यह बताने के लिए पढ़ना चाहिए था कि यह एक फीचर-अनुरोध फाइल करने के बजाय पहले ही कार्यान्वित किया गया है) – Bergi

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