हाल ही में, मुझे अपने Redux कोडबेस में एक बग का सामना करना पड़ा जिससे मुझे अपना सिर खुजलाना पड़ा। यदि आपने कभी भ्रम की उस अचानक लहर को महसूस किया है जब परीक्षण सूट एक ऐसी त्रुटि फेंकता है जिसका कोई मतलब नहीं है, तो आप उस भावना को जान लेंगे। यहां बताया गया है कि क्या हुआ और आख़िरकार मैंने समस्या का पता कैसे लगाया (और उसे ठीक किया)।
एक परिपत्र निर्भरता तब होती है जब दो या दो से अधिक मॉड्यूल एक-दूसरे पर निर्भर होते हैं - प्रत्यक्ष या अप्रत्यक्ष रूप से - निर्भरता श्रृंखला में एक अनंत लूप बनाते हैं। दूसरे शब्दों में, यह ऐसा है जैसे दो दोस्त कह रहे हों, "तुम पहले जाओ," लेकिन कोई भी कभी आगे नहीं बढ़ता। जावास्क्रिप्ट में, इसके परिणामस्वरूप अपरिभाषित मॉड्यूल या अपूर्ण डेटा हो सकता है, जिससे बग उत्पन्न होते हैं जिनका पता लगाना अविश्वसनीय रूप से कठिन हो सकता है।
दो जावास्क्रिप्ट फ़ाइलों की कल्पना करें, मॉड्यूलए.जेएस और मॉड्यूलबी.जेएस:
// moduleA.js import { functionB } from './moduleB.js'; export function functionA() { console.log('functionA called'); functionB(); } // moduleB.js import { functionA } from './moduleA.js'; export function functionB() { console.log('functionB called'); functionA(); }
यहाँ, दोनों मॉड्यूल एक दूसरे पर निर्भर हैं। जब जावास्क्रिप्ट उन्हें लोड करने का प्रयास करता है, तो यह भ्रमित हो जाता है क्योंकि पहले तैयार हुए बिना किसी को भी पूरी तरह से लोड नहीं किया जा सकता है। इससे अपरिभाषित फ़ंक्शंस या अपूर्ण मॉड्यूल जैसी समस्याएं उत्पन्न होती हैं - मूल रूप से, एक गड़बड़ी।
आह, वह भयानक त्रुटि जिसने इस साहसिक कार्य को शुरू किया:
Error: `reducer` is a required argument, and must be a function or an object of functions that can be passed to combineReducers. ❯ Module.configureStore node_modules/@reduxjs/toolkit/src/configureStore.ts:98:11
मेरी पहली प्रतिक्रिया? "रुको, क्या?!" - मेरा सबसे अच्छा पल नहीं। मुझे यकीन था कि मेरे रेड्यूसर अपनी जगह पर थे, इसलिए यह त्रुटि कहीं से भी नहीं आई। कुछ खोजबीन के बाद, मुझे एहसास हुआ कि यह एक लापता रिड्यूसर मुद्दा नहीं था, बल्कि मेरे Redux सेटअप में एक गोलाकार निर्भरता थी। बेशक, इसका पता लगाना आसान नहीं था!
तभी मुझे अपना उद्धारकर्ता मिला: एनपीएम पैकेज डीपीडीएम। यह रत्न आपके निर्भरता वृक्ष का विश्लेषण करता है और आपको दिखाता है कि वे गुप्त गोलाकार निर्भरताएँ कहाँ रहती हैं। निम्नलिखित कमांड चलाने से मुझे एक स्पष्ट दृश्य मिला:
dpdm --no-warning --no-tree ./src/index.tsx
और वोइला! मेरे प्रोजेक्ट में इसे क्या मिला, इसका एक अंश यहां दिया गया है:
• Circular Dependencies 01) src/stores/store.ts -> src/stores/rootReducer.ts -> src/stores/slice/authSlice.ts -> src/utilities/api.ts 02) src/stores/rootReducer.ts -> src/stores/slice/bookingSlice.ts -> src/hooks/redux.tsx -> src/stores/types.ts -> src/stores/setUpStore.ts 03) src/stores/types.ts -> src/stores/setUpStore.ts ...
रिपोर्ट स्पष्ट थी: मेरी Redux फ़ाइलों में मुख्य रूप से store.ts, rootReducer.ts और कुछ स्लाइस में सर्कुलर निर्भरता का एक समूह था। कुछ तर्कों को विभाजित करने, अनावश्यक निर्भरताओं को तोड़ने और कोड को फिर से तैयार करने के बाद, मुझे अंततः चीजें वापस क्रम में मिल गईं।
तो, अगली बार जब आप इन खतरनाक कीड़ों में से किसी एक से टकराएं, तो कुछ कॉफी लें, हंसें और उस घेरे को तोड़ दें!
हैप्पी डिबगिंग! ?
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3