Düğümde katı modu zorlamanın bir yolu var mı?


141

Bu yanıtı hiçbir yerde bulamadım, ancak bunun tartışıldığı birkaç posta listesi buldum, ancak bunlar oldukça eski ve bunun uygulanıp uygulanmadığı hakkında hiçbir fikrim yok.

Node.js'de katı modu kullanmaya zorlamak için yine de var mı?

"use strict";Tüm benim .js dosyaları yazma ... iyi, ben ekstra boilerplate eklemek yerine, sıkı mod kullanarak zorla tercih ederim.

Yanıtlar:


211

Lloyd'a göre artık

"use strict";

= = 0.10.7 düğümünde dosyanızın en üstünde yer alır , ancak tüm uygulamanızın katı şekilde çalışmasını istiyorsanız ( harici modüller dahil ) bunu yapabilirsiniz

düğüm --kullanım_dizgi


eek: fs.js: 1497 function emit () {^^^^^^^^ Sözdizimi Hatası: Katı modda, işlevler yalnızca üst düzeyde veya hemen başka bir işlev içinde bildirilebilir.
j03m

1
oh O_o, yani sıkı zorlarsanız dosya sistemini kullanamazsınız? hangi düğüm sürümünü kullanıyorsunuz, bunu v0.8.12'de almıyorum
Chad Scira

1
'v0.8.16' <--- hmm tuhaf. İzin verin gideyim.
j03m

13
V0.9.x ve daha yeni düğümlerde --use_strictbayrak beklendiği gibi çalışır.
TooTallNate

21
Not --use_strictuygulama ile daha sıkı modunu ayarlar, kontrollerle dışında olan tüm exteneral modülleri içerir.
Lewis

59

0.10.7 düğümünde, dosyanızın "use strict";en üstüne yerleştirerek dosya düzeyinde katı modu uygulayabilirsiniz . En sonunda!


25

Ayrıca kullanabilirsiniz

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

yani, bir kere yaz

require('use-strict')

hatta bir adım ileri gidip kullanın

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

Lütfen use-strict, çağrıldıktan sonra gereken her modülde daha fazla açılacağını unutmayın .

İstilacı olmayan bir yaklaşımı tercih ederseniz, başka bir modül yazdım

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

Bu sadece paketinizde katı modu etkinleştirir. Bence bu daha çok "Ne demek istediğimi yap" çözümü.


20

Sadece "use strict";geçerli dosyaların üstünde kullanın . Ortak plakayı kesmeye çalışmak cazip geldiğini biliyorum, ancak Javascript'te yapılamaz. Adlandırılmayacak düğüm bayrağı [1]

  • belgesizdir ve Düğüm'ün kendisi tarafından desteklenmez.
  • çıkartmak için tekliflerle karşılaştı .
  • düğüme özgüdür ve başka herhangi bir JavaScript motorunda desteklenmez.
  • standart dışıdır.
  • öyle değil aynı "use strict";bir derleyici küresel olduğu için ve tüm globaller gibi potansiyel olumsuz başkasının kodunu etkileyen ediyoruz.
  • her şey böceklere tabidir. katı mod ve özensiz mod farklı hatalara maruz kalabilir. yani, bazı katı mod hataları katı moda özgüdür

Diğer bazı programcılar bunun benzer -wALLveya benzer olduğunu düşünebilir , değil. Bu, geçici bir şekilde etkinleştirdiğiniz (standardı kıran) ve herkesin derleyici semantiklerini değiştirdiğiniz standartlaştırılmış işlevselliktir.

Dipnotlar

  1. Düğüm bayrağı --use_strict. Kullanma .

1
Bana bunun "Düğüm tarafından desteklenmediğini" bulduğunu söyleyebilir misin? Bu sadece belgelenmediği gerçeğinden mi çıkarılıyor?
1919'da

Çoğunlukla. Ve bu bir Düğüm işi olmadığı için, v8'e bir geçiş.
Evan Carroll

Teşekkür ederim! Neden Node cli belgelerinde bulamadığımı merak ettim .
Galen Long

18

Ayrıca, shebang tercüman yönergesinde katı bayrak da verebilirsiniz.

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

Ancak şu anda (en azından v0.9.x öncesi), @ chad-scira'nın yanıt tartışmalarındaki yorumlarda açıklanan sorunların aynısını yaşıyor.


1
envböyle parametreleri geçirmenize izin vermiyor, değil mi?
Letharion

OSX 10.9.4'te benim için çalışıyor.
John Lehmann

1
evet - hala bir dosyanın üstünde olması gereken iki rakip kod satırı olan korkunç bir zorlama örneğini göstermektedir.
aaaaaa

7
Dikkat, envOSX'de bunun gibi ekstra parametrelerle çalışır, ancak Linux'ta çalışmaz.
AerandiR
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.