2016-08-20 35 views
7

के साथ एक सादा JSON फ़ाइल के रूप में बंडल JSON मेरे पास एक वेब-ऐप है जिसके लिए कॉन्फ़िगरेशन JSON फ़ाइल की आवश्यकता होती है जिसमें एंड-पॉइंट और अन्य आवश्यक स्टार्ट-अप पैरामीटर शामिल हैं।वेबपैक

module.exports = { 
    "name": "foo", 
    "key": true, 
}; 

क्या मैं चाहूँगा मैदान है वर्ष JSON यह पार्स किया जा सकता है जिसका अर्थ है:

अगर मैं json-लोडर का उपयोग करें, फ़ाइल नहीं "असली json", यह कुछ इस तरह दिखाई देंगे और वेब सर्वर पर भेजने से पहले तैनाती प्रक्रिया के हिस्से के रूप में बदल दिया गया जहां से इसकी सेवा की जाएगी।

फ़ाइल-लोडर का उपयोग करने का एक विकल्प है। हालांकि, इसका मतलब है कि (हालांकि यह एक छोटा काम है) मुझे फाइल को डाउनलोड करने के लिए कोड लिखना है। मैं वेबपैक इसे संभालना चाहता हूं और उपलब्ध होना चाहता हूं।

क्या कोई तरीका है कि मैं require एक JSON फ़ाइल कर सकता हूं, जिसे एक सादे पुराने JSON फ़ाइल के रूप में लिखा गया है और रन टाइम पर आयात किया गया है?

+0

इसी तरह के समान: https://stackoverflow.com/questions/34180983/webpack-copy-json-files-via-file-loader?rq=1 –

+0

क्यों न केवल 'fs' का उपयोग करें और फ़ाइल को पढ़ें? – Li357

+0

सुनिश्चित करें कि आपका क्या मतलब है।यदि यह ब्राउज़र में है, तो यह काम नहीं कर सकता है। यदि आप वेबपैक के निर्माण के हिस्से के रूप में हैं, तो यह कैसे मदद करेगा? –

उत्तर

1

वहाँ एक रास्ता है कि मैं require कर सकते हैं एक JSON फ़ाइल है, जो एक सादे पुराने JSON फ़ाइल के रूप में लिखा और रन टाइम पर आयात किया जाता है?

वेबपैक संकलन-समय पर कार्य करता है। इसका मतलब है कि जब आपको फ़ाइल की आवश्यकता होती है, तो वह उस फ़ाइल को लोड करता है, लोडर-चेन द्वारा निर्दिष्ट संशोधनों को निष्पादित करता है और आपको उस श्रृंखला से अंतिम परिणाम निर्यात करता है। तो आप लोडर की तरह आवाज़ के लिए क्या पूछ रहे हैं, जो फ़ाइल लोडर की तरह काम करता है, लेकिन एक आईआईएफई निर्यात करता है जो आवश्यक फाइल के लिए वादा करता है।

सिद्धांत रूप में यह एक webpack लोडर बनाना संभव है, मान लीजिए कि एक async-फ़ाइल-लोडर कि फ़ाइल-लोडर से इनपुट हो जाता है आप के लिए async requst संभाल लेंगे। के तरह कुछ मान लेते हैं:

const promisedFile = require('async-file-loader!file-loader!./myJson.json'); 
promisedFile.then(file => { console.log(JSON.parse(file)); }); 

लेकिन फिर अनुरोध से निपटने के लिए पूरे तर्क यह है कि कॉल के भीतर boundled किया जाएगा। async-फ़ाइल-लोडर कुछ इस तरह दिखेगा:

:

module.exports = function(source) { 
    return `module.exports = eval("(function(url){ 
     /* define async request func, preform request and return promise in here */ 
    })(${url})")`; 
} 

सुंदर बुरा ...

आप क्रम में अपने json-फ़ाइल को लोड करना चाहते हैं, मैं 2 विकल्प दिखाई देंगे

  1. फ़ाइल लोडर का उपयोग करें और जेसन फ़ाइल को अपने आप पर असुरक्षित तरीके से अनुरोध करें।
  2. सर्वर-पक्षीय स्क्रिप्टिंग भाषा का उपयोग करें और .html फ़ाइल में कॉन्फ़िगर इंजेक्ट करें। यदि आप अपने बैकएंड पक्ष पर उदाहरण के लिए नोडजेज़ का उपयोग कर रहे हैं और अभिव्यक्त करते हैं, तो अनुरोध को पूरा करने से पहले आप आसानी से Cheerio का उपयोग करके कॉन्फ़िगर इंजेक्ट कर सकते हैं।
+0

धन्यवाद @ShabbY का उत्पादन करेगा। विकल्प 1 वही है जो हम अभी कर रहे हैं, लेकिन इससे बचने की उम्मीद थी। –

1

जैसा कि शब्बी ने ऊपर कहा था, वेबपैक एक मॉड्यूल बंडलर है और समय से पहले आपकी फ़ाइलों को संकलित करता है।

ऐसा लगता है कि रनटाइम पर पहुंचने के लिए आपको समय कॉन्फ़िगरेशन फ़ाइल (जेसन) जोड़ने की आवश्यकता है। इसके लिए, वेबपैक के साथ इसे बंडल करने के बजाय सामान्य AJAX कॉल का उपयोग करके फ़ाइल को लोड करना होगा।

+0

समझा। हालांकि, मुझे लगता है कि मैं एक लोडर चाहता हूं, कि एक फ़ाइल दी गई है, बस फ़ाइल को वेब से खींचती है। फ़ाइल लोडर के समान। –