2016-01-13 22 views
19

मेरे पास एक एकल .json फ़ाइल है जिसमें कॉन्फ़िगरेशन सामग्री शामिल है जिसे मैं सामान्य आयात/आवश्यकता वाक्यविन्यास का उपयोग करके किसी अन्य स्क्रिप्ट फ़ाइल से संदर्भित करना चाहता हूं। वर्तमान में मैं इन निर्भरताओं को हल करने के लिए वेबपैक का उपयोग कर रहा हूं और उन्हें मेरे लिए बंडल कर रहा हूं। यह फ़ाइल हालांकि मैं रनटाइम पर लोड होना चाहता हूं और उम्मीद कर रहा था कि कुछ प्रकार का लोडर हो सकता है जो रनटाइम पर मेरे लिए इस फ़ाइल को हल और लोड कर सकता है। अब तक मुझे कुछ भी नहीं मिला है जो मेरी ज़रूरतों से मेल खाता है।रनटाइम पर संसाधन लोड करने के लिए वेबपैक का उपयोग करने का कोई तरीका?

उदाहरण:

var jQuery = require('jQuery'); 
var sol = require('some-other-lib'); 
var myConfig = require('/real/production/url/myconfig.json'); 

console.log(myConfig.myFavoriteSetting); 

उदाहरण में ऊपर मैं चाहता myconfig.json संकल्प लिया और कार्यावधि में भरी हुई है।

संभवतः संबंधित प्रश्नों:

+1

मैं इसी तरह की सामग्री के लिए खोज की है, लेकिन किसी भी लोडर नहीं मिला है काम करता है। आखिर में मैंने उस के लिए jquery getJSON फ़ंक्शन का उपयोग किया। – VyvIT

+0

मैंने वर्तमान में एक ही कामकाज किया है। शायद यह लंबे समय तक भी अधिक सरल है। – jpierson

+0

मैं इस बात पर उत्सुक हूं कि आप jquery getJSON के साथ भी यह काम कैसे कर पाएंगे? मुझे 404 मिलते हैं कि कॉन्फ़िगरेशन फ़ाइल मौजूद नहीं है हालांकि यह dist फ़ोल्डर में है। –

उत्तर

5

मुझे लगता है कि क्या आप चाहते हैं require.ensure, webpack के कोड बंटवारे है। आपके द्वारा सुनिश्चित किए जाने वाले मॉड्यूल को एक अलग बंडल में रखा जाता है, और जब आपका 'सुनिश्चित' रनटाइम पर निष्पादित होता है, तो वेबपैक रनटाइम स्वचालित रूप से अजाक्स के माध्यम से बंडल प्राप्त करता है। सुनिश्चित करने के लिए कॉलबैक सिंटैक्स पर ध्यान दें - बंडल लोड होने पर आपका कॉलबैक चलता है। आपको अभी भी उस बिंदु पर वांछित मॉड्यूल की आवश्यकता है; .ensure बस सुनिश्चित करता है कि वे उपलब्ध हैं।

कोड विभाजन वेबपैक की प्रमुख विशेषताओं में से एक है, यह आपको किसी भी समय आपको केवल वही लोड करने देता है जो आपको चाहिए। कई बंडलों को अनुकूलित करने के लिए प्लगइन्स इत्यादि भी हैं।

+2

requ.ensure का उपयोग करीब आता है, लेकिन मुझे लगता है कि मैं जो खोज रहा था वह कुछ और था कि कैसे * async/await * विभाजित हो सकता है आधे में एक फ़ंक्शन ताकि दूसरा आधा कोड की सिंक्रोनस शैली को बदलने के बिना निरंतरता के रूप में चलता है। यदि इस तरह की एक सुविधा मौजूद नहीं है, हालांकि मुझे लगता है कि आपका जवाब शायद सबसे अच्छा है जिसे मैं प्राप्त करने जा रहा हूं। – jpierson

5

वेबपैक 2 के साथ, आप System.import का उपयोग कर सकते हैं। यह वादा एपीआई का उपयोग करता है। AFAIK, वर्तमान में ब्राउज़र में async/प्रतीक्षा कोड चलाने का कोई तरीका नहीं है। मेरा मानना ​​है कि बेबेल केवल एसिंक को पार कर सकता है/ES2015 तक प्रतीक्षा कर सकता है, इसलिए नोड (v6.x) का नवीनतम संस्करण इसे चला सकता है। मुझे नहीं लगता कि ब्राउज़र इसे समझने में सक्षम हैं क्योंकि पारदर्शी कोड जेनरेटर का उपयोग करता है।

System.import के लिए कृपया ध्यान दें कि कुछ पुराने ब्राउज़र (आईई 11 और नीचे मुझे विश्वास है) आपको वादा API को पॉलीफिल करने की आवश्यकता होगी। इसके लिए polyfill.io देखें।

यदि आप वास्तव में ब्राउज़र में async/await का उपयोग करना चाहते हैं, तो आप ES2015 के लिए पूर्ण पॉलीफ़िल करने में सक्षम हो सकते हैं।

+0

हां, मुझे शायद अधिक स्पष्ट रूप से यह कहना चाहिए था कि मैं एक एसिंक दृष्टिकोण की तलाश में था जो कॉलबैक, वादे, जेनरेटर या कुछ ऐसा करता है जिसे मैं एसिंक को लपेट सकता हूं। मेरे मामले में मैं पहले से ही इन प्रकार के एसिंक हैंडलिंग सुविधाओं का प्रबंधन करने के लिए बैबेल के साथ-साथ टाइपस्क्रिप्ट का उपयोग कर रहा था। – jpierson

1

मेरे पास एक फ़ाइल (config.json) के साथ एक ही मामला था।

मैं Copy-Webpack-Plugin

new CopyWebpackPlugin([ 
    // Copy directory contents to {output}/ 
    { from: 'config.json' } 
    ]) 

उसके बाद से इसे कॉपी करने का निर्णय लिया, मेरी फाइल उत्पादन का निर्माण निर्देशिका में था। मैं अपने webpack.config फ़ाइल में मेरी फाइल संदर्भ के लिए 'बाहरी' संपत्ति का इस्तेमाल किया:

externals: { 
    'config': "require('./config.json')" 
    } 

मेरी js फ़ाइल में जो config.json लोड:

import config from 'config' 

'config' लोड की आवश्यकता होती है ('। /config.json) जो आउटपुट बिल्ड निर्देशिका में से एक है।

मुझे पता है कि यह मुश्किल है लेकिन मुझे मेरी समस्या का कोई और समाधान नहीं मिला।शायद यह किसी की मदद करेगा।

संपादित

मैं आदेश का निर्माण करने की वजह से import config from 'config' इसके बिना समझ में आता नहीं था में webpack का इस्तेमाल किया था।

externals: { 
    './config.json': "require('./config.json')" 
    } 

और

var config = require('./config.json') //replace import config from 'config' 

webpack के बिना, जावास्क्रिप्ट को समझने var config = require('./config.json') क्योंकि यह सही रास्ता है: यही कारण है कि मैं की जगह है।

और जब मैं webpack के साथ निर्माण, यह require('./config.json') जब यह './config.json' देखता द्वारा बदल सकता है इसलिए यह

+0

मुझे यह काम करने के लिए प्रतीत नहीं होता है। विकास में निर्माण करते समय webpack.config.js ('./config.json' संदर्भ के कारण) के समान फ़ोल्डर में config.json की खोज वेबपैक नहीं करेगा? मेरा सिर्फ config.json के लिए नहीं मिला एक मॉड्यूल फेंकता है क्योंकि यह dev सेटअप में जेएस फ़ाइलों के साथ कहीं और है। – Tru

+0

आप सही हैं, अगर मैं अपना सर्वर चलाने के लिए चाहता हूं, तो मुझे इसे बिल्ड फ़ोल्डर में करना होगा। वेबपैक बिल्ड/index.js में मेरा सर्वर फ़ोल्डर बनाएं। मेरा फ़ोल्डर इस तरह है: फ़ोल्डर बनाएं -> config.json और index.js (वेबपैक के बाद, index.js uglified में 'आवश्यकता (' ./ config.json ') है। सर्वर फ़ोल्डर -> config.json और index.js (लेकिन index.js में, मेरे पास 'config' से आयात कॉन्फ़िगरेशन है और नोड इसे समझ में नहीं आता ..) –

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

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