node · JavaScript
संदेश
ReferenceError: window is not defined
इसका मतलब
वह कोड browser में नहीं, server के Node के भीतर चला। Node में न window है, न document, न localStorage; इसलिए Next.js या Nuxt जैसे ढाँचे में, जहाँ पहले server पर render होता है, module लोड होते समय window छूने पर यहीं रुक जाता है — अक्सर यह component के बाहर पड़ी एक ही पंक्ति होती है, या किसी केवल-browser library का import ही। यदि काम केवल browser का है तो उसे typeof window !== 'undefined' से घेरें, या इससे बेहतर, उसे useEffect के भीतर ले जाएँ — क्योंकि effect केवल browser में चलता है। जब पूरी library केवल browser की हो, तो Next.js में dynamic(() => import('./C'), { ssr: false }) से उसे server render से बाहर रखना उत्तर है, इस क़ीमत पर कि वह हिस्सा server से बने HTML में नहीं होगा।
सुधार
इसका एक-लाइन कमांड नहीं है। व्याख्या में लिखा है कि क्या देखना है।
- कौन देता है
- node
- JavaScript
- 15
browser और node की त्रुटियाँ आमतौर पर यही बताती हैं कि क्या टूटा, यह नहीं कि वह मान ऐसा क्यों बना — आपने undefined पढ़ा, वह function नहीं था, वह JSON नहीं था — इसलिए सुधार की जगह उस पंक्ति से ऊपर है जिसने त्रुटि फेंकी, और ?. तथा डिफ़ॉल्ट मानों से केवल उस पंक्ति को चुप कराने पर वही समस्या और दूर जाकर, और कठिन रूप में लौट आती है।
एरर संदेश कैसे पढ़ें
- पहली पंक्ति से पढ़ें। जितना नीचे जाएँगे उतना वह औज़ार के भीतर की बात है; कारण आम तौर पर सबसे ऊपर लिखा होता है।
- फ़ाइल का नाम और पंक्ति संख्या दिखे तो वहीं से शुरू करें — stack का सबसे ऊपरी frame नहीं, बल्कि वह सबसे ऊपरी पंक्ति जिसमें आपकी लिखी फ़ाइल का नाम हो।
- संदेश को जैसा है वैसा खोजें, पर पहले अपने paths और variable नाम हटा दें — वही खोज को अटकाते हैं।
- वही स्थिति औज़ार के हर संस्करण में अलग शब्दों में आती है। नतीजे बेमेल लगें तो संस्करण संख्या भी जोड़ें।
- कोई सुधार चिपकाने से पहले देख लें कि वह क्या फेंक देगा। इनमें कुछ पलटे नहीं जा सकते।
अक्सर पूछे जाने वाले सवाल
Q. “ReferenceError: window is not defined” का क्या मतलब है?
वह कोड browser में नहीं, server के Node के भीतर चला। Node में न window है, न document, न localStorage; इसलिए Next.js या Nuxt जैसे ढाँचे में, जहाँ पहले server पर render होता है, module लोड होते समय window छूने पर यहीं रुक जाता है — अक्सर यह component के बाहर पड़ी एक ही पंक्ति होती है, या किसी केवल-browser library का import ही। यदि काम केवल browser का है तो उसे typeof window !== 'undefined' से घेरें, या इससे बेहतर, उसे useEffect के भीतर ले जाएँ — क्योंकि effect केवल browser में चलता है। जब पूरी library केवल browser की हो, तो Next.js में dynamic(() => import('./C'), { ssr: false }) से उसे server render से बाहर रखना उत्तर है, इस क़ीमत पर कि वह हिस्सा server से बने HTML में नहीं होगा।
Q. इसे कैसे ठीक करें?
एक-लाइन कमांड नहीं है। ऊपर की व्याख्या में लिखा है कि क्या देखना है।
Q. यह कौन-सा औज़ार देता है?
node। यह JavaScript में आता है, और संदेश 5 शब्दों का है।