SyntaxError: कड़े मोड में const का उपयोग


241

मैं Node.js साथ काम कर रहा हूँ, और मेरे js फ़ाइलों में से एक में मैं उपयोग कर रहा हूँ constमें "strict mode"। इसे चलाने की कोशिश करते समय, मुझे एक त्रुटि मिल रही है:

SyntaxError: Use of const in strict mode.

ऐसा करने के लिए सबसे अच्छा अभ्यास क्या है?

संपादित करें:

'use strict'
const MAX_IMAGE_SIZE = 1024*1024; // 1 MB

@thefourtheye क्रोम में जांच, एफएफ ठीक काम कर रहा है।
ज़हीर अहमद

उपयोग करें var। सेमीकॉलन जोड़ें'use strict';
एड्रियन

@ZaheerAhmed वास्तव में मैं Node.js yaar का उपयोग कर रहा हूं। इसमें वह ठीक काम करता है।
thefourtheye

आह ... ideone.com
Thefourtheye

नवीनतम नोड संस्करण v5.3.0 को अपडेट करने के बाद, यह अब अच्छी तरह से काम करता है।
ज़ंगव

जवाबों:


284

constऔर let(ES6 और सद्भाव उर्फ) ECMAScript 2015 के हिस्सा हैं, और Node.js 0.10 या 0.12 में डिफ़ॉल्ट रूप से सक्षम नहीं किया गया। Node.js 4.x के बाद से, "सभी शिपिंग [ES2015] सुविधाएँ, जो V8 को स्थिर मानती हैं, Node.js पर डिफ़ॉल्ट रूप से चालू हो जाती हैं और उन्हें किसी भी प्रकार के रनवे ध्वज की आवश्यकता नहीं होती है।" Node.js डॉक्स में डिफ़ॉल्ट रूप से ES2015 सुविधाओं को सक्षम करने के लिए एक सिंहावलोकन है, और जिन्हें रनटाइम ध्वज की आवश्यकता होती है । इसलिए Node.js 4.x या नए में अपग्रेड करके त्रुटि गायब होनी चाहिए।

Node.js 0.10 और 0.12 में ECMAScript 2015 की कुछ विशेषताओं (शामिल constऔर शामिल let) को सक्षम करने के लिए ; अपने नोड प्रोग्राम को एक सद्भाव ध्वज के साथ प्रारंभ करें, अन्यथा आपको एक सिंटैक्स त्रुटि मिलेगी। उदाहरण के लिए:

node --harmony app.js

यह सब इस बात पर निर्भर करता है कि आपका सख्त js किस तरफ स्थित है। मैं constआपके सर्वर पक्ष पर घोषणाओं के साथ सख्त मोड का उपयोग करने की सलाह दूंगा और सद्भाव ध्वज के साथ सर्वर शुरू करूंगा । क्लाइंट पक्ष के लिए, आपको ES2015 को ES5 में बदलने के लिए बैबेल या समान टूल का उपयोग करना चाहिए , क्योंकि सभी क्लाइंट ब्राउज़र constघोषणाओं का समर्थन नहीं करते हैं ।


8
यह सबसे पूर्ण और प्रासंगिक उत्तर है।
ज़मनेट्स

सख्त मोड भी एक ध्वज (शाब्दिक अभिव्यक्ति के बजाय) नोड - शर्म - फ्यूज_स्ट्रिक्ट app.js का उपयोग करके लागू किया जा सकता है जो अच्छा है।
एड्रिया

7
मैं "use_strict" झंडे का उपयोग करने के खिलाफ सलाह देना चाहूंगा। यह एक दुभाषिया में किसी और का कोड चला रहा है जो इसके लिए नहीं लिखा गया था। हमेशा 'use strict';खुद का उपयोग करें, लेकिन तीसरे पक्ष के कोड को खुद तय करें।
थॉमस जेन्सेन

1
FWIW मैं एक ही मुद्दा नोड v8.1 चल रहा है, लेकिन armfh संस्करण (रास्पबेरी पाई)।
जेम्स

238

यदि यह नोडज में हो रहा है, तो यह नोडज के पुराने संस्करण के कारण है। नोड का उपयोग करके अद्यतन करें,

1) एनपीएम का कैश साफ़ करें:

sudo npm cache clean -f

2) 'n' नामक एक छोटा सहायक स्थापित करें

sudo npm install -g n

3) नवीनतम स्थिर NodeJS संस्करण स्थापित करें

sudo n stable

नोडज के निर्देशों को, https://stackoverflow.com/a/19584407/698072 से अपडेट करें


3
मुझे यह "npm ERR! Notsup असमर्थित npm ERR! नोटसअप आपके ऑपरेटिंग सिस्टम या आर्किटेक्चर: n@2.1.4" के साथ संगत नहीं है, जबकि चरण 2 की कोशिश कर रहा है। अच्छा समय।
VSO

1
आपके उपयोग-मामले के आधार पर, आप nodeसंस्करण को निर्दिष्ट करने के लिए इसे सुरक्षित मान सकते हैं । उदाहरण के लिए, इस लेखन के समय के रूप में, sudo n 6.9.4नवीनतम एलटीएस sudo n stableस्थापित करेगा , जहां स्थापित होगा 7.4.0। जाहिर है, यह एक ब्रेकिंग चेंज है, इसलिए ध्यान रखें n stable। वैकल्पिक रूप से, sudo n ltsसबसे हालिया LTS स्थापित करता है।
jfmercer

1
सेंटोस 6.5 पर काम करता है। इससे पहले मुझे निम्नलिखित त्रुटि मिल रही थी "सिंटैक्सएरोर: सख्त मोड में कास्ट का उपयोग"। धन्यवाद
हिमांशु चौहान

1
इसने मेरे लिए एक विरासत मशीन पर समस्या को हल किया जहां - धर्म का झंडा नहीं था। सेटअप: एक स्क्रीन npm शुरू करने की कोशिश crontab में स्क्रिप्ट का उपयोग करके मॉनिटर की सख्त त्रुटि का कारण बना जहां इसे cli से चलाना नहीं था। पिछला नोड संस्करण 0.10.48 था, जो ubuntu 12.04.5 LTS पर चल रहा था, मैंने इस कदम का पालन किया और एक ने सॉफ्टलिंक / usr / बिन / नोड को / etc / विकल्प / नोड से /usr/local/n/versions-node/8.0 पर बदल दिया। .0 / बिन / नोड और सब कुछ बस काम किया। इसके लिए शुक्रिया!
ब्रायन लेमैन

1
बदमाश ने इसके लिए धन्यवाद दिया, इससे न केवल उस समस्या का समाधान हो गया, बल्कि SCA लोकल के निर्माण के समय सभी अंतर्निहित छोटी
मोटी लड़खड़ाहट

22

आमतौर पर यह त्रुटि तब होती है जब नोड का संस्करण जिसके खिलाफ कोड निष्पादित किया जा रहा है वह अपेक्षा से अधिक पुराना है। (यानी 0.12 या अधिक उम्र)।

अगर आप nvm का उपयोग कर रहे हैं, तो कृपया सुनिश्चित करें कि आपके पास उपयोग किए जा रहे नोड का सही संस्करण है। आप सख्त मोड के तहत const के लिए नोड.ग्रीन पर संगतता की जांच कर सकते हैं

मुझे एक अन्य पोस्ट पर एक समान मुद्दा मिला और मैंने वहां अपना जवाब विस्तार से दिया


1
वेबस्टॉर्म में अपना नोड प्रोजेक्ट चलाते समय मैं इसमें भाग गया। रेपो में मेरा स्थानीय संस्करण 8.2.1 चला रहा था, लेकिन वेबस्टॉर्म ने मेरे /usr/bin/nodeफ़ोल्डर को देखा , जिसमें 0.10.46 था।
Shadoninja

20

अपने नोड को अपडेट करने के बाद एक महत्वपूर्ण कदम अपने नोड बाइनरी को नवीनतम स्थापित नोड संस्करण से जोड़ना है

sudo ln -sf /usr/local/n/versions/node/6.0.0/bin/node /usr/bin/node  

1
मैं यह कैसे पता लगा सकता हूं कि कौन सा संस्करण अभी स्थापित हुआ है?
जोस ललौस

1
आप पा सकते हैं कि नोड का आपका वर्तमान संस्करण कहां चल रहा हैwhich node
स्टीव

"N स्थिर" चलाने के दौरान भी आपको निर्देशिका दिखाई देगी: इस पंक्ति में: mkdir: /usr/local/n/versions/node/8.0.0 ताकि आप बस / usr / स्थानीय / n / संस्करणों / नोड पर जा सकें। और देखें कि क्या निर्देशिका मौजूद है।
ब्रायन लेमैन

@JoseLlausas node --versionसंस्करण संख्या को प्रिंट करता है जैसेv0.10.29
मार्कस

15

यह शायद हर किसी के लिए समाधान नहीं है, लेकिन यह मेरे लिए था।

यदि आप NVM का उपयोग कर रहे हैं, तो हो सकता है कि आप जो कोड चला रहे हैं, उसके लिए नोड का सही संस्करण सक्षम न हो। आपके द्वारा रीबूट करने के बाद, नोड का आपका डिफ़ॉल्ट संस्करण सिस्टम डिफ़ॉल्ट में वापस बदल जाता है।

प्रतिक्रिया-मूल के साथ काम करते समय इस पर चल रहा था जो ठीक काम कर रहा था। इस समस्या को हल करने के लिए नोड के सही संस्करण का उपयोग करने के लिए बस nvm का उपयोग करें।


2
और ऊपर बताए गए "समाधान" को बताने के लिए कोई कोड?
Kermit_ice_tea

हाँ, यह मेरा प्रारंभिक मुद्दा था। हालांकि मुझे एक पुराने सेंटोस संस्करण पर नोड और जीसीसी संस्करण संगतता मुद्दों के कारण किसी अन्य लिनक्स सर्वर पर स्विच करना पड़ा।
रोबॉट70

@Kermit_ice_tea प्रश्न में समान कोड। बग नोड के संस्करण में है, NVM का उपयोग करके इसे एक ऐसे संस्करण में सेट किया जाता है, जिसमें उस बग को कोड पास नहीं बनाता है। nvm use version-number-you-needआपको बस इतना करना है
बोटकोडर

8

चूंकि प्रश्न पूछा गया था, constकीवर्ड के लिए मसौदा पहले से ही ईसीएमएस्क्रिप्ट 2015 के भाग के रूप में एक जीवित मानक है । इसके अलावा Node.js का वर्तमान संस्करण --harmonyध्वज के बिना कॉन्स्ट घोषणाओं का समर्थन करता है

इसके बाद के संस्करण के साथ कहा कि तुम अब चला सकते हैं node app.jsके साथ, app.js:

'use strict';
const MB = 1024 * 1024;
...

सिंटेक्स शुगर और सख्त मोड दोनों का लाभ मिल रहा है।


एक मेगाबाइट MBदस की शक्ति है, जबकि एक मेबीबाइट MiBदो की शक्ति है। यानी 1MB = 1e6और 1MiB = 1024 * 1024। विकिपीडिया देखें: मेबिबाइट
डीजेडेवार्क

0

मेरा हाल ही में इसी तरह का मुद्दा था और इस प्रश्नोत्तर में समाप्त हुआ। यह वह समाधान नहीं है जिसकी ओपी तलाश कर रहा था, बल्कि इसी तरह के मुद्दे पर दूसरों की मदद कर सकता है।

मैं एक परियोजना को चलाने के लिए पीएम 2 का उपयोग कर रहा हूं और दिए गए स्टेजिंग सर्वर में मेरे पास नोड, एनपीएम और पीएम 2 का वास्तव में पुराना संस्करण है। मैंने सब कुछ अपडेट किया, हालांकि, मैंने वही त्रुटि रखी:

SyntaxError: कड़े मोड में const का उपयोग।

मैंने कई बार एप्लिकेशन को रोकने और शुरू करने की कोशिश की। साथ ही हर चीज को फिर से अपडेट करने की कोशिश की। कुछ भी काम नहीं किया। जब तक मैंने चेतावनी दी, जब तक मैं भाग नहीं गया pm2 start:

>>>> इन-मेमोरी PM2 आउट-ऑफ-डेट है,
>>>> $ pm2 अपडेट
मेमोरी PM2 संस्करण में: 0.15.10
स्थानीय PM2 संस्करण: 3.2.9

पकड़ लिया! दौड़ने के बाद pm2 update, मैं अंत में उम्मीद के मुताबिक चल रहा था। अब "सख्त मोड में बाधा" नहीं है।


-2

चुनाव आयोग द्वारा समर्थित नहीं है। इसलिए जब आप सख्त मोड निर्दिष्ट करते हैं, तो आपको सिंटैक्स त्रुटि मिलती है। यदि आप चाहते हैं कि आपका कोड सभी ब्राउज़रों के साथ संगत हो, तो आपको const के बजाय var का उपयोग करना होगा। मुझे पता है, आदर्श समाधान नहीं है, लेकिन यह वही है जो यह है। जावास्क्रिप्ट में रीड-ओनली प्रॉपर्टीज़ बनाने के तरीके हैं (देखें कि केवल प्योर जावास्क्रिप्ट में रीड-ओनली प्रॉपर्टीज़ को लागू किया जा सकता है? ) लेकिन मुझे लगता है कि यह आपके परिदृश्य के आधार पर ओवरकिल हो सकती है।

नीचे MDN से ब्राउज़र संगतता नोट है :

ब्राउज़र संगतता

Const का वर्तमान कार्यान्वयन एक मोज़िला-विशिष्ट एक्सटेंशन है और ECMAScript 5 का हिस्सा नहीं है। यह फ़ायरफ़ॉक्स और क्रोम (V8) में समर्थित है। सफारी 5.1.7 और ओपेरा 12.00 के रूप में, यदि आप इन ब्राउज़रों में कास्ट के साथ एक चर को परिभाषित करते हैं, तो आप अभी भी बाद में इसके मूल्य को बदल सकते हैं। यह इंटरनेट एक्सप्लोरर 6-10 में समर्थित नहीं है, लेकिन इंटरनेट एक्सप्लोरर 11 में शामिल है। कॉन्स्ट कीवर्ड वर्तमान में फ़ंक्शन स्कोप (जैसे वेरिएबल के साथ घोषित चर) में स्थिर घोषित करता है।

फ़ायरफ़ॉक्स, कम से कम संस्करण 13 के बाद से, यदि आप कोई स्थिरांक redeclare करते हैं, तो TypeError फेंकता है। यदि आप किसी स्थिरांक पर कोई अन्य मान असाइन करते हैं, तो कोई भी प्रमुख ब्राउज़र कोई सूचना या त्रुटि उत्पन्न नहीं करता है। इस तरह के एक ऑपरेशन का रिटर्न वैल्यू नए मूल्य का है, लेकिन पुनर्मूल्यांकन केवल फ़ायरफ़ॉक्स और क्रोम में असफल है (कम से कम संस्करण 20 के बाद से)।

const को ECMAScript 6 द्वारा परिभाषित किया जा रहा है, लेकिन विभिन्न शब्दार्थों के साथ। लेट स्टेटमेंट के साथ घोषित किए गए वेरिएबल्स के समान, कॉन्स्टेंट के साथ घोषित किए गए कॉन्स्टेंट ब्लॉक-स्कोप किए जाएंगे।


3
constECMAScript 6 में समर्थित है और यह व्यापक रूप से समर्थित है: kangax.github.io/compat-table/es6/#const लेकिन आप अपने उत्तर में सही हैं - 'use strict';और constमिश्रण नहीं करता है।
डॉटनेटकार्टेंटर

एक त्वरित परीक्षण से पता चलता है कि constसफारी 7 में फिर से घोषित किया जा सकता है, लेकिन ओपेरा 21, क्रोम 35 और फ़ायरफ़ॉक्स 29 में नहीं।
डॉटनेटकारपेंटर

21
ब्राउज़ करें संगतता का कोई सरोकार नहीं है ... यह Node.js है
zamnuts

-2

constसख्त मोड का उपयोग क्रोम 41 की रिलीज के साथ उपलब्ध है। वर्तमान में, क्रोम 41 बीटा पहले से ही जारी है और इसका समर्थन करता है।


6
बस स्पष्ट करने के लिए, मैं टिप्पणी करना चाहता था कि चूंकि ओपी ने नोड.जेएस के लिए कहा था, ब्राउज़र संगतता प्रासंगिक नहीं है। फिर भी किसी तरह उत्तर में 4 अपवोट थे, और इसने अन्य अधिक प्रासंगिक उत्तरों को अस्पष्ट कर दिया।
Dan Dascalescu

-3
cd /
npm install -g nave
nave use 6.11.1
node app.js

लिनक्स सर्वर के लिए
आयुमी जूल

1
ढेर अतिप्रवाह में आपका स्वागत है। उत्तर में योगदान करते समय, कुछ कोड और स्पष्टीकरण देना सबसे अच्छा होता है।
ओ जोंस

2
कोई स्पष्टीकरण नहीं होने के कारण डाउन वोट करें। क्यों नेव पैकेज स्थापित किया जाना चाहिए ..
Sean83

ऐसा समाधान क्यों काम करेगा? एक स्पष्टीकरण की जरूरत है।
पॉल इसारिस

हालाँकि कोई स्पष्टीकरण नहीं है, मेरे लिए केवल यहाँ बताई गई कमांड्स को चलाने के बाद हल की गई त्रुटि: npm install -g nave; nave use 6.11.1 +1
रूबेन अल्वेस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.