होम·एरर संदेश

node · JavaScript

संदेश

SyntaxError: Cannot use import statement outside a module

इसका मतलब

node या browser ने उस फ़ाइल को CommonJS script के रूप में पढ़ा, और उसमें ESM का शब्द import मौजूद था। कोई .js फ़ाइल CommonJS ही मानी जाती है जब तक package.json कुछ और घोषित न करे, और browser में वही बात तब होती है जब <script> पर type="module" न हो। npm pkg set type=module पूरे package को ESM घोषित कर देता है और यह सुलझ जाता है, पर उस क्षण से उस package की हर .js में require और __dirname नहीं रहते, इसलिए बचे हुए CommonJS फ़ाइलों को भी साथ बदलना पड़ता है — अगर केवल एक फ़ाइल बदलनी है तो उसका नाम .mjs कर देना अधिक सीमित और सुरक्षित बदलाव है।

सुधार

npm pkg set type=module
कौन देता है
node
JavaScript
15

browser और node की त्रुटियाँ आमतौर पर यही बताती हैं कि क्या टूटा, यह नहीं कि वह मान ऐसा क्यों बना — आपने undefined पढ़ा, वह function नहीं था, वह JSON नहीं था — इसलिए सुधार की जगह उस पंक्ति से ऊपर है जिसने त्रुटि फेंकी, और ?. तथा डिफ़ॉल्ट मानों से केवल उस पंक्ति को चुप कराने पर वही समस्या और दूर जाकर, और कठिन रूप में लौट आती है।

एरर संदेश कैसे पढ़ें

  • पहली पंक्ति से पढ़ें। जितना नीचे जाएँगे उतना वह औज़ार के भीतर की बात है; कारण आम तौर पर सबसे ऊपर लिखा होता है।
  • फ़ाइल का नाम और पंक्ति संख्या दिखे तो वहीं से शुरू करें — stack का सबसे ऊपरी frame नहीं, बल्कि वह सबसे ऊपरी पंक्ति जिसमें आपकी लिखी फ़ाइल का नाम हो।
  • संदेश को जैसा है वैसा खोजें, पर पहले अपने paths और variable नाम हटा दें — वही खोज को अटकाते हैं।
  • वही स्थिति औज़ार के हर संस्करण में अलग शब्दों में आती है। नतीजे बेमेल लगें तो संस्करण संख्या भी जोड़ें।
  • कोई सुधार चिपकाने से पहले देख लें कि वह क्या फेंक देगा। इनमें कुछ पलटे नहीं जा सकते।

अक्सर पूछे जाने वाले सवाल

Q. “SyntaxError: Cannot use import statement outside a module” का क्या मतलब है?

node या browser ने उस फ़ाइल को CommonJS script के रूप में पढ़ा, और उसमें ESM का शब्द import मौजूद था। कोई .js फ़ाइल CommonJS ही मानी जाती है जब तक package.json कुछ और घोषित न करे, और browser में वही बात तब होती है जब <script> पर type="module" न हो। npm pkg set type=module पूरे package को ESM घोषित कर देता है और यह सुलझ जाता है, पर उस क्षण से उस package की हर .js में require और __dirname नहीं रहते, इसलिए बचे हुए CommonJS फ़ाइलों को भी साथ बदलना पड़ता है — अगर केवल एक फ़ाइल बदलनी है तो उसका नाम .mjs कर देना अधिक सीमित और सुरक्षित बदलाव है।

Q. इसे कैसे ठीक करें?

npm pkg set type=module — चलाने से पहले ऊपर देख लें कि यह कमांड क्या फेंक देता है।

Q. यह कौन-सा औज़ार देता है?

node। यह JavaScript में आता है, और संदेश 8 शब्दों का है।

साथ आने वाले एरर