¿Alguna forma de forzar el modo estricto en el nodo?


141

No pude encontrar esta respuesta en ningún lado, pero encontré varias listas de correo donde se discutió esto, sin embargo, son bastante antiguas y no tengo idea de si esto se implementa o no.

¿Hay alguna forma de forzar el uso del modo estricto en node.js?

Escribir "use strict";en todos mis archivos .js ... bueno, prefiero que se vea obligado a usar el modo estricto, en lugar de agregar repetitivo adicional.

Respuestas:


210

Según Lloyd ahora puedes colocar

"use strict";

en la parte superior de su archivo en el nodo> = 0.10.7 , pero si desea que toda su aplicación se ejecute estrictamente ( incluidos los módulos externos ), puede hacerlo

nodo --use_strict


eek: fs.js: 1497 function emit () {^^^^^^^^ SyntaxError: en el código de modo estricto, las funciones solo pueden declararse en el nivel superior o inmediatamente dentro de otra función.
— j03m

1
oh O_o, ¿entonces no puedes usar el sistema de archivos si haces un estricto? qué versión de nodo está utilizando, no voy a obtener esto en v0.8.12
— Chad Scira

1
'v0.8.16' <--- hmm impar. Déjame ir a verificar.
— j03m

13
En el nodo v0.9.xy posterior, el --use_strictindicador funciona como se esperaba.
— TooTallNate

21
Tenga en cuenta que --use_strictestablecerá el modo estricto para toda la aplicación, incluye todos los módulos externos, que están fuera de sus controles.
— Lewis

59

En el nodo 0.10.7 puede aplicar el modo estricto a nivel de archivo al colocarlo "use strict";en la parte superior de su archivo. ¡Finalmente!


25

También puedes usar

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

es decir, escribe una vez

require('use-strict')

o incluso dar un paso adelante y usar

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

Tenga en cuenta que use-strict activará estrictamente más en cada módulo requerido después de la invocación.

Si prefiere un enfoque no invasivo, escribí otro módulo

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

que habilita el modo estricto solo en su paquete. Creo que es más una solución de "Haz lo que quiero decir".


20

Solo use "use strict";en la parte superior de los archivos aplicables. Sé que es tentador tratar de cortar repetitivo, pero simplemente no se puede hacer en Javascript. La bandera de nodo que no se nombrará [1]

  • no está documentado y no es compatible con el propio nodo.
  • ha enfrentado propuestas para eliminarlo.
  • es específico de nodo y no es compatible con ningún otro motor de JavaScript.
  • No está estandarizado.
  • no es lo mismo que "use strict";porque es un compilador global, y como todos los globales, potencialmente está afectando negativamente el código de otra persona.
  • Todo está sujeto a errores. El modo estricto y el modo descuidado pueden estar sujetos a diferentes errores. es decir, algunos errores de modo estricto son exclusivos del modo estricto

Algunos otros programadores pueden pensar que esto es similar a -wALL o similar, no lo es. Esta es una funcionalidad estandarizada que está habilitando de manera ad-hoc (rompiendo el estándar) y cambiando la semántica del compilador de todos.

Notas al pie

  1. La bandera del nodo es --use_strict. No lo utilice .

1
¿Puede decirme dónde descubrió que "Node no lo admite"? ¿Se deduce eso del hecho de que no está documentado?
— Pushkin

Principalmente. Y debido a que no es para nada un nodo, es un paso a la v8.
— Evan Carroll

¡Gracias! Me preguntaba por qué no podía encontrarlo en los nodos cli docs .
— Galen Long

18

También puede proporcionar la marca estricta en la directiva de intérprete shebang.

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

Pero actualmente (al menos antes de v0.9.x) sufre los mismos problemas descritos por los comentarios en la discusión de @ chad-scira.


1
envno te permite pasar parámetros como ese, ¿verdad?
— Letharion

Funciona para mí, en OSX 10.9.4.
— John Lehmann

1
Sí, todavía ejemplifica una convención forzada terrible, que son dos líneas de código que deben estar en la parte superior de un archivo.
— aaaaaa

77
Tenga cuidado, envfuncionará con parámetros adicionales como ese en OSX, pero no en Linux.
— AerandiR
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.