नोड में सख्त मोड को बाध्य करने का कोई तरीका?


141

कहीं भी यह उत्तर नहीं मिला, लेकिन मुझे कई मेलिंग सूचियां मिलीं, जहां इस पर चर्चा की गई थी, ये हालांकि पुराने हैं और मुझे नहीं पता कि यह लागू हुआ है या नहीं।

वैसे भी नोड.जेएस में सख्त मोड का उपयोग करने के लिए बाध्य है?

"use strict";मेरी सभी .js फाइलों में लिखना ... ठीक है, मैं इसे अतिरिक्त बॉयलरप्लेट जोड़ने के बजाय सख्त मोड का उपयोग करने के लिए मजबूर होना पसंद करता हूं।

जवाबों:


211

लॉयड के अनुसार अब आप जगह बना सकते हैं

"use strict";

नोड में अपनी फ़ाइल के शीर्ष पर = = 0.10.7 , लेकिन यदि आप चाहते हैं कि आपका पूरा ऐप सख्त ( बाहरी मॉड्यूल सहित ) में चले तो आप ऐसा कर सकते हैं

नोड --use_strict


eek: fs.js: 1497 function emit () {^ ^ ^ ^ ^ ^ ^ ^ ^ ^ SyntaxError: सख्त मोड कोड में, फ़ंक्शन केवल शीर्ष स्तर पर या किसी अन्य फ़ंक्शन के भीतर तुरंत घोषित किए जा सकते हैं।
j03m

1
ओह O_o, इसलिए यदि आप कड़ाई से बल देते हैं तो आप फाइलसिस्टम का उपयोग नहीं कर सकते? नोड का कौन सा संस्करण आप उपयोग कर रहे हैं, यह v0.8.12 पर नहीं मिल रहा है
चाड Scira

1
'v0.8.16' <--- हम्म विषम। मुझे सत्यापित करने के लिए जाना।
j03m

13
नोड v0.9.x और नए रूप में --use_strictझंडा उम्मीद के मुताबिक काम करता है।
TooTallNate

21
ध्यान दें कि --use_strictपूरे एप्लिकेशन को सख्त मोड सेट करेगा, सभी एक्स्टेंनल मॉड्यूल शामिल करें, जो आपके नियंत्रण से बाहर हैं।
लुईस

59

नोड 0.10.7 में आप "use strict";अपनी फ़ाइल के शीर्ष पर रखकर फ़ाइल स्तर पर सख्त मोड लागू कर सकते हैं । आखिरकार!


25

आप भी उपयोग कर सकते हैं

https://npmjs.org/package/use-strict

वह है, एक बार लिखें

require('use-strict')

या यहां तक ​​कि एक कदम आगे बढ़ाएं और उपयोग करें

https://npmjs.org/package/node-strict

कृपया ध्यान दें कि use-strictआह्वान के बाद आवश्यक हर मॉड्यूल पर सख्ती अधिक होगी।

यदि आप एक आक्रामक तरीके को पसंद नहीं करते हैं, तो मैंने एक और मॉड्यूल लिखा है

https://www.npmjs.org/package/strict-mode

जो आपके पैकेज में केवल सख्त मोड को सक्षम करता है। मुझे लगता है कि अधिक "डू व्हाट आई मीन" समाधान है।


20

बस "use strict";लागू फ़ाइलों के शीर्ष पर उपयोग करें। मुझे पता है कि यह बॉयलरप्लेट को काटने की कोशिश करने के लिए आकर्षक है, लेकिन यह केवल जावास्क्रिप्ट में नहीं किया जा सकता है। नोड ध्वज जिसे नाम नहीं दिया जाएगा [1]

  • अनिर्दिष्ट है, और स्वयं नोड द्वारा असमर्थित है।
  • इसे हटाने के प्रस्तावों का सामना किया है।
  • नोड-विशिष्ट है और किसी अन्य जावास्क्रिप्ट इंजन में समर्थित नहीं है।
  • अनियंत्रित है।
  • यह वैसा ही नहीं है "use strict";क्योंकि यह एक संकलक वैश्विक है, और सभी ग्लोबल्स की तरह आप संभावित रूप से किसी और के कोड पर प्रतिकूल प्रभाव डाल रहे हैं।
  • सब कुछ कीड़े के अधीन है। सख्त मोड और मैला-मोड विभिन्न बग के अधीन हो सकते हैं। यह कहना है, कुछ सख्त मोड बग्स सख्त मोड के लिए अद्वितीय हैं

कुछ अन्य प्रोग्रामर सोच सकते हैं कि यह -wALLया के समान है, यह नहीं है। यह मानकीकृत कार्यक्षमता है जो आप एक तदर्थ फैशन (मानक को तोड़ने) में सक्षम कर रहे हैं और हर किसी के संकलक शब्दार्थ को बदल रहे हैं।

फुटनोट

  1. नोड ध्वज है --use_strictइसका उपयोग न करें

1
क्या आप मुझे बता सकते हैं कि आपने कहां पाया कि यह "नोड द्वारा असमर्थित है?" क्या यह सिर्फ इस तथ्य से है कि यह दस्तावेज नहीं है?
pushkin

अधिकतर। और क्योंकि यह एक नोड बात नहीं है, यह v8 के माध्यम से एक पास है।
इवान कैरोल

धन्यवाद! मुझे आश्चर्य हुआ कि मैं इसे नोड क्ली डॉक्स में क्यों नहीं खोज पाया ।
गेलन लांग

18

आप शेबंग दुभाषिया निर्देश पर सख्त झंडा भी प्रदान कर सकते हैं।

#!/usr/bin/env node --use_strict

लेकिन वर्तमान में (कम से कम पूर्व v0.9.x) यह @ chad-scira के उत्तर चर्चा में टिप्पणियों द्वारा वर्णित समान समस्याओं से ग्रस्त है।


1
envआपको उस तरह के मापदंडों को पारित करने की अनुमति नहीं देता है, क्या यह करता है?
लेटेरियन

OSX 10.9.4 पर मेरे लिए काम करता है।
जॉन लेहमैन

1
हाँ - अभी भी एक भयानक लागू सम्मेलन की मिसाल देता है, कोड की दो प्रतिस्पर्धी पंक्तियाँ होना जो एक फ़ाइल के शीर्ष पर होना है।
आगा

7
खबरदार, envOSX पर उस तरह के अतिरिक्त मापदंडों के साथ काम करेंगे, लेकिन लिनक्स पर नहीं।
एरंडीआर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.