Adakah cara untuk memaksakan mode ketat pada simpul?


141

Tidak dapat menemukan jawaban ini di mana pun, tetapi saya memang menemukan beberapa milis tempat hal ini dibahas, namun ini agak lama dan saya tidak tahu apakah ini diterapkan atau tidak.

Apakah ada cara memaksa menggunakan mode ketat di node.js?

Menulis "use strict";di semua file .js saya ... yah, saya lebih suka dipaksa menggunakan mode ketat, daripada menambahkan boilerplate tambahan.

Jawaban:


210

Menurut Lloyd Anda sekarang dapat menempatkan

"use strict";

di bagian atas file Anda di simpul> = 0.10.7 , tetapi jika Anda ingin seluruh aplikasi Anda berjalan dengan ketat ( termasuk modul eksternal ) Anda dapat melakukan ini

simpul --use_strict


eek: fs.js: 1497 function emit () {^^^^^^^^ SyntaxError: Dalam kode mode yang ketat, fungsi hanya dapat dideklarasikan di tingkat atas atau langsung dalam fungsi lain.
j03m

1
oh O_o, jadi Anda tidak dapat menggunakan sistem file jika Anda memaksa dengan ketat? versi node mana yang Anda gunakan, saya tidak mendapatkan ini di v0.8.12
Chad Scira

1
'v0.8.16' <--- hmm aneh. Biarkan saya memverifikasi.
j03m

13
Dalam node v0.9.x dan yang lebih baru --use_strictflag berfungsi seperti yang diharapkan.
TooTallNate

21
Catatan yang --use_strictakan mengatur mode ketat ke seluruh aplikasi, termasuk semua modul eksternal, yang di luar kendali Anda.
Lewis

59

Dalam node 0.10.7 Anda dapat menerapkan mode ketat pada level file dengan menempatkan "use strict";di bagian atas file Anda. Akhirnya!


25

Anda juga bisa menggunakan

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

itu, tulis sekali

require('use-strict')

atau bahkan melangkah maju dan gunakan

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

Harap dicatat bahwa use-strictakan mengaktifkan lebih ketat pada setiap modul yang diperlukan setelah doa.

Jika Anda lebih suka pendekatan yang tidak invasif, saya menulis modul lain

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

yang memungkinkan mode ketat hanya dalam paket Anda. Saya pikir itu lebih merupakan solusi "Do What I Mean".


20

Cukup gunakan "use strict";di bagian atas file yang berlaku. Saya tahu ini tergoda untuk mencoba memotong boilerplate, tetapi itu tidak bisa dilakukan dalam Javascript. Bendera simpul yang tidak akan dinamai [1]

  • tidak berdokumen, dan tidak didukung oleh Node sendiri.
  • telah menghadapi proposal untuk menghapusnya.
  • spesifik node dan tidak didukung di mesin JavaScript lainnya.
  • tidak standar.
  • itu tidak sama dengan "use strict";karena ini adalah kompiler global, dan seperti semua global Anda berpotensi berdampak buruk pada kode orang lain.
  • semuanya tergantung bug. mode ketat dan mode ceroboh dapat mengalami bug yang berbeda. artinya, beberapa bug mode ketat unik untuk mode ketat

Beberapa programmer lain mungkin berpikir ini mirip -wALLatau sejenisnya, tidak. Ini adalah fungsi standar yang Anda aktifkan secara ad-hoc (melanggar standar) dan mengubah semantik kompilasi semua orang.

Catatan kaki

  1. Bendera simpul adalah --use_strict. Jangan gunakan itu .

1
Dapatkah Anda memberi tahu saya di mana Anda menemukan bahwa itu "tidak didukung oleh Node?" Apakah itu hanya disimpulkan dari fakta bahwa itu tidak didokumentasikan?
Pushkin

Kebanyakan. Dan karena itu bukan hal Node sama sekali, ini adalah jalan masuk ke v8.
Evan Carroll

Terima kasih! Aku bertanya-tanya mengapa aku tidak bisa menemukannya di Node cli docs .
Galen Long

18

Anda juga dapat memberikan bendera ketat pada arahan juru bahasa shebang.

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

Tetapi saat ini (setidaknya sebelum v0.9.x) ia mengalami masalah yang sama seperti yang dijelaskan oleh komentar dalam jawaban @ chad-scira.


1
envtidak memungkinkan Anda untuk melewati parameter seperti itu, bukan?
Letharion

Bekerja untuk saya, di OSX 10.9.4.
John Lehmann

1
yeah - masih mencontohkan konvensi yang dipaksakan mengerikan, bahwa menjadi dua baris kode bersaing yang harus di bagian atas file.
aaaaaa

7
Hati-hati, envakan bekerja dengan parameter tambahan seperti itu di OSX, tetapi tidak di Linux.
AerandiR
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.