সিনট্যাক্সেরর: কড়া মোডে কনস্টের ব্যবহার


241

আমি Node.js সঙ্গে কাজ করছি, আর আমার JS ফাইল এক আমি ব্যবহার করছি constমধ্যে "strict mode"। এটি চালানোর চেষ্টা করার সময়, আমি একটি ত্রুটি পেয়েছি:

SyntaxError: Use of const in strict mode.

এটি করার সর্বোত্তম অনুশীলন কী?

সম্পাদনা:

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

ক্রোমটি পরীক্ষা করুন, এফএফ ঠিকঠাক কাজ করছে।
জহির আহমেদ

ব্যবহার var। সেমিকোলন যুক্ত করুন'use strict';
অ্যাড্রিয়ান

@ জাহিরআহমেড আসলে আমি নোড.জেএস ইয়ার ব্যবহার করছি। এটি যে ভাল কাজ করে।
thefourtheye

আহ ... আদর্শ ব্যর্থ হয়েছে। Com
thefourtheye

সর্বশেষ নোড সংস্করণ v5.3.0 আপডেট করার পরে, এটি এখন ভালভাবে কাজ করে।
zangw

উত্তর:


284

constএবং let(ES6 এবং হারমনি ওরফে) এর নাম ECMAScript 2015 এর অংশ হওয়ায়, আর Node.js 0.10 বা 0.12 ডিফল্টরূপে সক্রিয় করা হয় নি। যেহেতু নোড.জেএস ৪.০, "সমস্ত শিপিং [ES2015] বৈশিষ্ট্য, যা ভি 8 স্থিতিশীল মনে করে, ডিফল্টরূপে নোড.জেজে চালু করা হয় এবং কোনও ধরণের রানটাইম পতাকা প্রয়োজন হয় না।" নোড.জেএস ডক্সে কি ES2015 বৈশিষ্ট্যগুলি ডিফল্টরূপে সক্ষম করা হয়েছে এবং যার জন্য একটি রানটাইম পতাকা প্রয়োজন তার একটি ওভারভিউ রয়েছে । সুতরাং নোড.জেএস 4.x বা আরও নতুনতে আপগ্রেড করার মাধ্যমে ত্রুটিটি অদৃশ্য হয়ে যাবে।

নোড.জেএস 0.10 এবং 0.12 তে কিছু ECMAScript 2015 বৈশিষ্ট্য (সহ constএবং let) সক্ষম করতে ; আপনার নোড প্রোগ্রামটি একটি সাদৃশ্য পতাকা দিয়ে শুরু করুন, অন্যথায় আপনি একটি সিনট্যাক্স ত্রুটি পাবেন। উদাহরণ স্বরূপ:

node --harmony app.js

আপনার কড়া জেএসটি কোন দিকে অবস্থিত তা নির্ভর করে। আমি constআপনার সার্ভারের পাশে ঘোষণার সাথে কঠোর মোড ব্যবহার করার পরামর্শ দিচ্ছি এবং সাদৃশ্য পতাকা দিয়ে সার্ভার শুরু করব। ক্লায়েন্টের পক্ষে, ES2015 কে ES5 তে রূপান্তর করতে আপনার বাবেল বা অনুরূপ সরঞ্জাম ব্যবহার করা উচিত , যেহেতু সমস্ত ক্লায়েন্ট ব্রাউজারগুলি constঘোষণাগুলি সমর্থন করে না ।


8
এটি সর্বাধিক সম্পূর্ণ এবং প্রাসঙ্গিক উত্তর।
জামনুট

কঠোর মোড একটি পতাকা ব্যবহার করে (আক্ষরিক প্রকাশের চেয়ে বরং) নোড --হারোমনি - ব্যবহার_সংশোধন অ্যাপ্লিকেশন.জগুলিও প্রয়োগ করতে পারে যা দুর্দান্ত।
অ্যাডরিয়া

7
আমি "ব্যবহার_সংশ্লিষ্ট" পতাকা ব্যবহারের বিরুদ্ধে পরামর্শ দিতে চাই। এটি কোনও অনুবাদকের পক্ষে অন্যের কোড চালাচ্ছে যা এর জন্য লেখা হয়নি। সর্বদা 'use strict';নিজেকে ব্যবহার করুন তবে তৃতীয় পক্ষের কোডটি নিজের জন্য সিদ্ধান্ত নিতে দিন।
টমাস জেনসেন

1
এফডাব্লুআইডাব্লু আমি একই সমস্যাটি নোড ভি 8.1 চলমান পেয়েছি তবে আর্মফের সংস্করণ (রাস্পবেরি পাই)।
জেমস

238

যদি এটি নোডেজে হয় তবে এটি নোডেজের পুরানো সংস্করণের কারণে to ব্যবহার করে নোড আপডেট করুন,

1) এনপিএম এর ক্যাশে সাফ করুন:

sudo npm cache clean -f

2) 'এন' নামে একটি সামান্য সহায়ক ইনস্টল করুন

sudo npm install -g n

3) সর্বশেষ স্থিতিশীল নোডজেএস সংস্করণ ইনস্টল করুন

sudo n stable

আপডেট, থেকে নেওয়া নির্দেশাবলী nodejs https://stackoverflow.com/a/19584407/698072


3
আমি এই "এনপিএম ইআরআর! নোটসআপটি অসমর্থিত এনএমপি ইআরআর পেয়েছি! নোটসপ আপনার অপারেটিং সিস্টেম বা আর্কিটেকচারের সাথে সামঞ্জস্যপূর্ণ নয়: n@2.1.4" পদক্ষেপ 2 করার চেষ্টা করার সময় শুভ সময়।
ভিএসও

1
আপনার ব্যবহারের ক্ষেত্রে উপর নির্ভর করে, nodeসংস্করণটি নির্দিষ্ট করে তুলতে আপনি এটি আরও নিরাপদ দেখতে পাচ্ছেন । উদাহরণস্বরূপ, এই লেখার সময় হিসাবে, sudo n 6.9.4সর্বশেষতম এলটিএস sudo n stableইনস্টল করবে , যেখানে ইনস্টল হবে 7.4.0। স্পষ্টতই, এটি একটি ব্রেকিং পরিবর্তন, সুতরাং সাবধানতা অবলম্বন করুন n stable। বিকল্পভাবে, sudo n ltsঅতি সাম্প্রতিক এলটিএস ইনস্টল করে।
jfmercer

1
সেন্টোস 6.5 এ কাজ করে। এর আগে আমি নিম্নলিখিত ত্রুটিটি পেয়েছিলাম "সিনট্যাক্সেরর: কড়া মোডে কনস্টের ব্যবহার"। ধন্যবাদ
হিমাংশু চৌহান

1
এটি আমার জন্য একটি উত্তরাধিকারী মেশিনে সমস্যাটি সমাধান করেছে যেখানে --স্মরণী পতাকাটি দেয় নি। সেটআপ: ক্রোনটবে স্ক্রিপ্টগুলি ব্যবহার করে এনএমপি স্টার্ট মনিটরের একটি স্ক্রিন চালু করার চেষ্টা করার ফলে ক্লিপ থেকে এটি চালানো হয়নি এমন কঠোর ত্রুটির কারণ হয়েছিল। পূর্ববর্তী নোড সংস্করণটি ছিল ওবুন্টু ১২.০৪.৫ এলটিএস-তে চালিত 0.10.48 আমি এই পদক্ষেপটি অনুসরণ করেছি এবং একটি / / etc / বিকল্প / নোড থেকে / ইউএসআর / লোকাল / এন / রূপান্তর / নোড / ৮.০ এ স্লটলিঙ্ক / ইউএসআর / বিন / নোড পরিবর্তন করছি .0 / বিন / নোড এবং সমস্ত কিছু সবেমাত্র কাজ করে। এই জন্য আপনাকে ধন্যবাদ!
ব্রায়ান লেইম্যান

1
বাডাস এর জন্য ধন্যবাদ, এসসিএ লোকাল তৈরি করার সময় এটি কেবল সেই সমস্যাটিই নয়, সমস্ত সহজাত সামান্য
ফেবিলগুলিই সমাধান করেছে

22

সাধারণত এই ত্রুটিটি ঘটে যখন কোডটি কার্যকর করা হয় সেই নোডের সংস্করণটি প্রত্যাশার চেয়ে পুরানো হয়। (অর্থাত্ 0.12 বা তার বেশি)।

আপনি যদি এনভিএম ব্যবহার করছেন তবে দয়া করে নিশ্চিত হয়ে নিন যে আপনার কাছে নোডের সঠিক সংস্করণ ব্যবহৃত হচ্ছে। আপনি কঠোর মোডের অধীনে কনডের জন্য নোড.g्रीनে সামঞ্জস্যতা পরীক্ষা করতে পারেন

আমি অন্য একটি পোস্টে অনুরূপ সমস্যা পেয়েছি এবং আমার উত্তরটি এখানে বিস্তারিত পোস্ট করেছি


1
ওয়েবস্টর্মে আমার নোড প্রকল্পটি চালানোর সময় আমি এতে ছুটে এসেছি। রেপোতে আমার স্থানীয় সংস্করণটি নোড ৮.২.১ চলছে, কিন্তু ওয়েবস্টর্ম আমার /usr/bin/nodeফোল্ডারের দিকে চেয়েছিল , যার ০.১০.৪6 ছিল।
শাদোনিনজা

20

আপনি আপনার নোড আপডেট করার পরে একটি গুরুত্বপূর্ণ পদক্ষেপ আপনার নোড বাইনারি সর্বশেষ ইনস্টল নোড সংস্করণ সাথে লিঙ্ক করা হয়

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

1
সবেমাত্র কোন সংস্করণ ইনস্টল হয়েছে তা আমি কীভাবে জানব?
হোসে ল্লাউসাস

1
আপনার নোডের বর্তমান সংস্করণটি কোথায় চলছে তা চালিয়ে আপনি আবিষ্কার করতে পারেনwhich node
স্টিভ

এছাড়াও এই ডিরেক্টরিতে "এন স্থিতিশীল" চলার সময় আপনি ডিরেক্টরিটি দেখতে পাবেন: এমকেডির: /usr/local/n/versions/node/8.0.0 সুতরাং আপনি কেবল / usr / স্থানীয় / এন / সংস্করণ / নোড / এ যেতে পারেন এবং দেখুন ডিরেক্টরি কি বিদ্যমান।
ব্রায়ান লেইম্যান

@ জোজেলাউসাস node --versionসংস্করণ নম্বরটি প্রিন্ট করে যেমনv0.10.29
মার্কাস

15

এটি সম্ভবত সবার জন্য সমাধান নয়, তবে এটি আমার জন্য ছিল।

আপনি যদি এনভিএম ব্যবহার করে থাকেন তবে আপনি যে কোডটি চালাচ্ছেন তার জন্য আপনি নোডের সঠিক সংস্করণটি সক্ষম নাও করতে পারেন। আপনি পুনরায় বুট করার পরে আপনার নোডের ডিফল্ট সংস্করণটি সিস্টেম ডিফল্টে ফিরে আসে।

দেশটির সাথে কাজ করার সময় এটি কাজ করছিল যা ভাল কাজ করে। এই সমস্যাটি সমাধান করার জন্য নোডের সঠিক সংস্করণটি ব্যবহার করতে কেবল এনভিএম ব্যবহার করুন।


2
এবং উপরে বর্ণিত "সমাধান" চিত্রিত করার জন্য কোনও কোড?
Kermit_ice_tea

হ্যাঁ, এটি আমার প্রাথমিক সমস্যা ছিল। যদিও আমাকে পুরনো সেন্টোস সংস্করণে নোড এবং জিসিসি সংস্করণ সামঞ্জস্যতা সমস্যার কারণে অন্য কোনও লিনাক্স সার্ভারে স্যুইচ করতে হয়েছিল।
রোবট 70

প্রশ্নের উত্তর @ কেরমিট_ইস_টিয়া। বাগটি নোডের সংস্করণে রয়েছে, এনভিএম ব্যবহার করে এমন কোনও সংস্করণে সেট করার জন্য যে বাগটি নেই সেই কোডটি পাস করে। nvm use version-number-you-needআপনাকে যা করতে হবে তা হল।
নৌকোডার

8

প্রশ্নটি জিজ্ঞাসার সময় থেকেই, constকীওয়ার্ডের খসড়াটি ইতিমধ্যে ECMAScript 2015 এর অংশ হিসাবে একটি জীবনমান । এছাড়াও নোড.জেএস এর বর্তমান সংস্করণটি পতাকা ছাড়াই কনস্ট্যান্ট ঘোষণাকে সমর্থন করে--harmony

উপরের কথাটি বলে আপনি এখন চালাতে পারবেন node app.js, এর সাথে app.js:

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

সিনট্যাক্স চিনি এবং কঠোর মোডের সুবিধা উভয়ই পাচ্ছে।


একটি মেগাবাইট MBদশটি শক্তি, এবং একটি মেগাবাইট MiBদুটি শক্তি। অর্থাত্ 1MB = 1e6এবং 1MiB = 1024 * 1024। উইকিপিডিয়া দেখুন: মেবিবাইট
ডিজেডাভমার্ক

0

আমার সম্প্রতি একটি অনুরূপ সমস্যা ছিল এবং এই প্রশ্নোত্তর শেষ হয়েছিল। এটি ওপি-র সন্ধানের সমাধান নয় তবে একইরকম সমস্যা নিয়ে অন্যদের সহায়তা করতে পারে।

আমি একটি প্রকল্প পরিচালনার জন্য PM2 ব্যবহার করছি এবং প্রদত্ত স্টেজিং সার্ভারে আমার কাছে নোড, এনপিএম এবং পিএম 2 এর একটি সত্যিকারের পুরানো সংস্করণ ছিল। আমি সবকিছু আপডেট করেছি, তবে, আমি একই ত্রুটি রেখেছি:

সিনট্যাক্সেরর: কড়া মোডে কনস্টের ব্যবহার।

আমি কয়েকবার অ্যাপ্লিকেশনটি থামানোর চেষ্টা করেছি। আবার সব কিছু আপডেট করার চেষ্টাও করেছি। কিছুই কাজ হয়নি। যতক্ষণ না আমি দৌড়ানোর সময় একটি সতর্কতা লক্ষ্য করেছি pm2 start:

>>>> ইন-মেমোরি PM2 হয় আউট-অফ-তারিখ, একটি করুন:
>>>> $ pm2 আপডেট
মেমরির PM2 সংস্করণে: 0.15.10
স্থানীয় PM2 সংস্করণ: 3.2.9

Gotcha! দৌড়ানোর পরে pm2 update, আমি শেষ পর্যন্ত অ্যাপ্লিকেশনটি প্রত্যাশা অনুযায়ী চলতে সক্ষম হয়েছি। কোনও "কড়া মোডে" ত্রুটি নেই।


-2

কনস্টিটি ECMAScript দ্বারা সমর্থিত নয়। সুতরাং আপনি কঠোর মোড নির্দিষ্ট করার পরে, আপনি সিনট্যাক্স ত্রুটি পান। আপনি যদি আপনার কোডটি সমস্ত ব্রাউজারের সাথে সামঞ্জস্য করতে চান তবে কনস্টের পরিবর্তে আপনার ব্যবহার করতে হবে। আমি জানি, আদর্শ সমাধান নয়, তবে এটিই এটি। জাভাস্ক্রিপ্টে কেবল পঠনযোগ্য বৈশিষ্ট্য তৈরি করার উপায় রয়েছে ( খালি জাভাস্ক্রিপ্টে কেবল পঠনযোগ্য বৈশিষ্ট্য প্রয়োগ করা যেতে পারে ? ) তবে আমি মনে করি এটি আপনার দৃশ্যের উপর নির্ভর করে ওভারকিল হতে পারে।

নীচে MDN থেকে ব্রাউজারের সামঞ্জস্য নোট :

ব্রাউজার সামঞ্জস্য

কনস্টের বর্তমান প্রয়োগটি একটি মজিলা-নির্দিষ্ট এক্সটেনশন এবং এটি ECMAScript 5 এর অংশ নয় It এটি ফায়ারফক্স এবং ক্রোমে সমর্থিত (ভি 8)। সাফারি 5.1.7 এবং অপেরা 12.00 হিসাবে, আপনি যদি এই ব্রাউজারগুলিতে কনস্টের সাথে কোনও ভেরিয়েবল সংজ্ঞায়িত করেন তবে আপনি পরেও এর মান পরিবর্তন করতে পারেন। এটি ইন্টারনেট এক্সপ্লোরার 6-10 এ সমর্থিত নয়, তবে এটি ইন্টারনেট এক্সপ্লোরার 11-এ অন্তর্ভুক্ত রয়েছে কনস্ট কীওয়ার্ডটি বর্তমানে ফাংশন স্কোপটিতে ধ্রুবককে ঘোষণা করে (যেমন ভেরিয়েবলগুলি ভেরিয়েবল হিসাবে ঘোষিত)।

ফায়ারফক্স, কমপক্ষে 13 সংস্করণ থেকে, আপনি ধ্রুবকটিকে পুনরায় ঘোষণা করেন তবে একটি টাইপরর ফেলে দেয়। আপনি যদি একটি ধ্রুবককে অন্য মান নির্ধারণ করেন তবে কোনও প্রধান ব্রাউজার কোনও নোটিশ বা ত্রুটি তৈরি করে না। এই জাতীয় ক্রিয়াকলাপের রিটার্ন মান হ'ল নতুন মূল্য নির্ধারিত, তবে পুনরায় নিয়োগটি কেবল ফায়ারফক্স এবং ক্রোমে ব্যর্থ হয় (কমপক্ষে সংস্করণ 20 এর পরে)।

কনস্টমটি ECMAScript 6 দ্বারা সংজ্ঞায়িত হতে চলেছে, তবে বিভিন্ন শব্দার্থবিজ্ঞানের সাথে। লেট স্টেটমেন্টের সাথে ঘোষিত ভেরিয়েবলগুলির অনুরূপ, কনস্টের সাথে ঘোষিত ধ্রুবকগুলি ব্লক-স্কোপড হবে।


3
constECMAScript 6 এ সমর্থিত এবং এটি ব্যাপকভাবে সমর্থিত: kangax.github.io/compat-table/es6/#const তবে আপনি নিজের উত্তরে ঠিক আছেন - 'use strict';এবং constমেশান না।
dotnetCarpenter

একটি দ্রুত পরীক্ষা দেখায় যে constসাফারি 7-তে পুনরায় ঘোষণাযোগ্য তবে অপেরা 21, ক্রোম 35 এবং ফায়ারফক্স 29-এ নয়
ডটনেটপার্পেন্টার

21
ব্রাউজ সামঞ্জস্যতা কোনও উদ্বেগের বিষয় নয় ... এটি নোড.জেএস
জ্যামনেটস

-2

constক্রম 41 এর মুক্তির সাথে কঠোর মোডের ব্যবহার উপলব্ধ। বর্তমানে ক্রোম 41 বিটা ইতিমধ্যে প্রকাশিত হয়েছে এবং এটি সমর্থন করে।


6
কেবল পরিষ্কার করতেই, আমি মন্তব্য করতে চেয়েছিলাম যেহেতু ওপি নোড.জেএস চেয়েছে, ব্রাউজারের সামঞ্জস্যতা প্রাসঙ্গিক নয়। তবুও কোনওভাবে উত্তরটির 4 টি upvotes ছিল এবং এটি অন্যান্য আরও প্রাসঙ্গিক উত্তরকে অস্পষ্ট করে।
ড্যান ড্যাসকলেসকু

-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
রুবেন আলভেস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.