Un moyen de forcer le mode strict dans le nœud?


141

Je n'ai trouvé cette réponse nulle part, mais j'ai trouvé plusieurs listes de diffusion où cela a été discuté, elles sont plutôt anciennes et je n'ai aucune idée si cela est implémenté ou non.

Est-il possible de forcer l'utilisation du mode strict dans node.js?

Écrire "use strict";dans tous mes fichiers .js ... eh bien, je préfère qu'il soit forcé d'utiliser le mode strict, plutôt que d'ajouter des passe-partout supplémentaires.

Réponses:


211

Selon Lloyd, vous pouvez maintenant placer

"use strict";

en haut de votre fichier dans node> = 0.10.7 , mais si vous voulez que toute votre application s'exécute en strict ( y compris les modules externes ), vous pouvez le faire

node --use_strict


eek: fs.js: 1497 function emit () {^^^^^^^^ SyntaxError: Dans le code en mode strict, les fonctions ne peuvent être déclarées qu'au niveau supérieur ou immédiatement dans une autre fonction.
— j03m

1
oh O_o, donc vous ne pouvez pas utiliser le système de fichiers si vous forcez strict? quelle version du nœud utilisez-vous, je ne l'obtiens pas sur la v0.8.12
— Chad Scira

1
'v0.8.16' <--- hmm impair. Laissez-moi vérifier.
— j03m

13
Dans le nœud v0.9.x et plus récent, l' --use_strictindicateur fonctionne comme prévu.
— TooTallNate

21
Notez que --use_strictcela définira le mode strict pour l'ensemble de l'application, inclura tous les modules externes, qui sont hors de vos contrôles.
— Lewis

59

Dans le nœud 0.10.7, vous pouvez appliquer le mode strict au niveau du fichier en le plaçant "use strict";en haut de votre fichier. Finalement!


25

Vous pouvez aussi utiliser

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

c'est-à-dire, écrivez une fois

require('use-strict')

ou même faire un pas en avant et utiliser

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

Veuillez noter que use-strictcela activera plus strict sur chaque module requis après l'invocation.

Si vous préférez une approche non invasive, j'ai écrit un autre module

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

qui active le mode strict uniquement dans votre package. Je pense que c'est plus une solution «fais ce que je veux dire».


20

Utilisez simplement "use strict";en haut des fichiers applicables. Je sais que c'est tentant d'essayer de supprimer le passe-partout, mais cela ne peut tout simplement pas être fait en Javascript. L'indicateur de nœud qui ne doit pas être nommé [1]

  • n'est pas documenté et n'est pas pris en charge par Node lui-même.
  • a fait face à des propositions pour le supprimer.
  • est spécifique au nœud et n'est pris en charge dans aucun autre moteur JavaScript.
  • n'est pas normalisé.
  • ce n'est pas la même chose que "use strict";parce qu'il s'agit d'un compilateur global, et comme tous les globaux, vous avez potentiellement un impact négatif sur le code de quelqu'un d'autre.
  • tout est sujet à des bugs. Le mode strict et le mode bâclé peuvent être sujets à différents bogues. c'est-à-dire que certains bogues en mode strict sont propres au mode strict

Certains autres programmeurs peuvent penser que c'est similaire -wALLou similaire, ce n'est pas le cas. Il s'agit d'une fonctionnalité standardisée que vous activez de manière ad hoc (en cassant la norme) et en changeant la sémantique du compilateur de tout le monde.

Notes de bas de page

  1. L'indicateur de nœud est --use_strict. Ne l'utilisez pas .

1
Pouvez-vous me dire où vous avez trouvé qu'il est "non pris en charge par Node"? Est-ce simplement déduit du fait que ce n'est pas documenté?
— pushkin

La plupart. Et comme ce n'est pas du tout une chose de Node, c'est un passage à la v8.
— Evan Carroll

Je vous remercie! Je me suis demandé pourquoi je ne pouvais pas le trouver dans la documentation Node cli .
— Galen Long

18

Vous pouvez également fournir l'indicateur strict sur la directive d'interprétation shebang.

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

Mais actuellement (au moins avant la v0.9.x), il souffre des mêmes problèmes décrits par les commentaires dans la réponse de @ chad-scira.


1
envne vous permet pas de passer des paramètres comme ça, n'est-ce pas?
— Letharion le

Fonctionne pour moi, sur OSX 10.9.4.
— John Lehmann

1
ouais - illustre toujours une terrible convention appliquée, c'est-à-dire deux lignes de code concurrentes qui doivent être en haut d'un fichier.
— aaaaaa

7
Attention, envfonctionnera avec des paramètres supplémentaires comme celui sur OSX, mais pas sur Linux.
— AerandiR
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.