2016-01-18 7 views
12

मुझे आश्चर्य है कि वेबपैक में वेब वर्कर "मानक वाक्यविन्यास" को संभालना वास्तव में संभव है (उदाहरण के लिए var worker = new Worker('my-worker-file.js');) और कैसे?वेबपैक के साथ वेब वर्कर्स "मानक" वाक्यविन्यास को कैसे संभालें?

मुझे worker-loader के बारे में पता है, लेकिन जहां तक ​​मुझे लगता है कि इसे एक विशिष्ट वाक्यविन्यास की आवश्यकता है और मानक के साथ संगत नहीं है।

दूसरे शब्दों में, क्या कोड को बदलने के बिना उस फ़ाइल को वेबपैक के साथ बंडल करना संभव है? ->https://github.com/mdn/simple-web-worker/blob/gh-pages/main.js#L8

browserify के साथ, मैं workerify परिवर्तन का उपयोग करूंगा, लेकिन मुझे वेबपैक की दुनिया में कुछ भी नहीं मिल रहा है।

+0

आप वेबपैक बंडल का उपयोग करना चाहते हैं, लेकिन फ़ाइल के प्रकार को संभालने के लिए इसके लोडर नहीं हैं? – Vishwanath

+4

मुझे लोडर का उपयोग करने में कोई फर्क नहीं पड़ता। लेकिन कार्यकर्ता-लोडर को गैर-मानक वाक्यविन्यास के साथ स्रोत कोड को अपडेट करने की आवश्यकता होगी। मुझे एक समाधान मिल जाएगा जो मानक वर्कर सिंटैक्स फिट बैठता है और स्रोत को बदलने की आवश्यकता नहीं है। – dhar

+0

संबंधित: किसी भी वेबपैक/browersify प्लगइन का उपयोग किए बिना _inline_ कार्यकर्ता को कैसे एक दिलचस्प दृष्टिकोण: https://twitter.com/rauschma/status/820286148765425664 – dhar

उत्तर

6

आप अपने कार्यकर्ता जेएस फ़ाइल को एक अलग बंडल में पैक करने के लिए वेबपैक को कॉन्फ़िगर कर सकते हैं। webpack.config.js में: bundle.js अपने मुख्य आवेदन और worker.js कार्यकर्ता entrypoint साथ साथ:

{ entry: { bundle: './app/main.js', worker: './app/my-worker-file.js' }, output: { filename: '[name].js' } ... }

इस तरह से आप दो बंडलों मिलता है। फिर, अपने मुख्य बंडल के अंदर, आप new Worker('worker.js')

worker-loader मूल रूप से वही कर सकते हैं। जब भी इसके माध्यम से कुछ लोड किया जाता है, तो यह एक अलग बंडल प्रविष्टि बनाता है, इसलिए बोलने के लिए, जिसे स्वचालित रूप से [hash].worker.js नाम दिया जाता है। यह तब इस फ़ाइल नाम को उस फ़ंक्शन में संग्रहीत करता है जो require('worker!...') से वापस लौटाया जाता है, जो इसे new Worker पर भेजता है। अंत में, यह वही प्रक्रिया है जैसा मैंने ऊपर वर्णित किया है केवल बंडल का नाम स्वचालित रूप से आपके लिए प्रबंधित किया जाता है।

+2

मुझे अभी भी परेशान लगता है कि मुझे बंडल नाम ('कार्यकर्ता आपके उदाहरण में .js') स्रोत प्रविष्टि फ़ाइल ('।/app/my-worker-file.js') के बजाय)। यह स्रोत कोड और वेबपैक कॉन्फ़िगरेशन के बीच एक निर्भरता बनाता है जिसे मैं टालने का प्रयास कर रहा था। फिर भी मुझे लगता है कि यह अब के लिए सबसे अच्छा उपलब्ध समाधान है, इसलिए उत्तर देने के लिए धन्यवाद! – dhar

+0

बिल्डिंग निर्देशिका में फ़ाइल वितरित करने के लिए 'CopyWebpackPlugin' का उपयोग करके, किसी भी जावास्क्रिप्ट फ़ाइल का उपयोग करने में वास्तव में कोई समस्या नहीं है, यहां तक ​​कि एक स्वयं-स्थायी फ़ाइल'।/App/my-worker-file.js' 'कहें। लेकिन यदि आप एक बंडल का उपयोग नहीं कर रहे हैं, तो आप अपनी कार्यकर्ता फ़ाइल में 'आवश्यकता' निर्भरताओं की क्षमता को जब्त कर रहे हैं। –

+1

वैसे - वेबपैक कॉन्फ़िगरेशन और स्रोत के बीच निर्भरता से परहेज करना वास्तव में 'कार्यकर्ता-लोडर' आपको देता है। यदि आप अपने स्रोत कोड में स्पष्ट रूप से 'आवश्यकता (' कार्यकर्ता! .... ') लिखना नहीं चाहते हैं (कहें, वेबपैक पर स्पष्ट निर्भरता से बचने के लिए), तो आप कार्यकर्ता लोडर का उपयोग करने के लिए बस वेबपैक को कॉन्फ़िगर कर सकते हैं: 'मॉड्यूल: {लोडर: [{test: /\.worker.js$/, लोडर: 'कार्यकर्ता'}]}' –

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