Alguma maneira de forçar o modo estrito no nó?


141

Não foi possível encontrar esta resposta em nenhum lugar, mas encontrei várias listas de discussão em que isso foi discutido; porém, elas são bastante antigas e não tenho idéia se isso foi implementado ou não.

Existe uma maneira de forçar o uso do modo estrito no node.js?

Escrevendo "use strict";em todos os meus arquivos .js ... bem, prefiro que seja forçado a usar o modo estrito, em vez de adicionar clichê extra.

Respostas:


210

De acordo com Lloyd, agora você pode colocar

"use strict";

na parte superior do arquivo no nó> = 0.10.7 , mas se você deseja que todo o seu aplicativo seja executado em estrito ( incluindo módulos externos ), é possível fazer isso

nó --use_strict


eek: fs.js: 1497 function emit () {^^^^^^^^ SyntaxError: No código de modo estrito, as funções só podem ser declaradas no nível superior ou imediatamente dentro de outra função.
J03m

1
oh O_o, então você não pode usar o sistema de arquivos se forçar estritamente? qual a versão do nó que você está usando, im não conseguir isso em v0.8.12
Chad Scira

1
'v0.8.16' <--- hmm ímpar. Deixe-me ir verificar.
J03m

13
No nó v0.9.xe mais recente, o --use_strictsinalizador funciona conforme o esperado.
precisa saber é o seguinte

21
Observe que --use_stricto modo estrito será definido para todo o aplicativo, incluindo todos os módulos externos, que estão fora de seu controle.
Lewis

59

No nó 0.10.7, você pode impor o modo estrito no nível do arquivo, colocando "use strict";na parte superior do seu arquivo. Finalmente!


25

Você também pode usar

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

isto é, escreva uma vez

require('use-strict')

ou até dar um passo à frente e usar

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

Observe que use-strictativará mais rigorosamente todos os módulos necessários após a chamada.

Se você preferir uma abordagem não invasiva, escrevi outro módulo

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

que habilita o modo estrito apenas no seu pacote. Eu acho que é mais uma solução "Faça o que eu quero dizer".


20

Basta usar "use strict";na parte superior dos arquivos aplicáveis. Eu sei que é tentador tentar cortar clichê, mas isso simplesmente não pode ser feito em Javascript. A bandeira do nó que não deve ser nomeada [1]

  • não é documentado e não é suportado pelo próprio nó.
  • enfrentou propostas para removê-lo.
  • é específico do nó e não é suportado em nenhum outro mecanismo JavaScript.
  • não é padronizado.
  • é não o mesmo que "use strict";porque é um compilador global, e como todos os globals você está impactando potencialmente adversa código de outra pessoa.
  • tudo está sujeito a erros. O modo estrito e o modo desleixado podem estar sujeitos a diferentes erros. isto é, alguns erros de modo estrito são exclusivos do modo estrito

Alguns outros programadores podem pensar que isso é semelhante -wALLou não, não é. Essa é a funcionalidade padronizada que você está habilitando de maneira ad-hoc (quebrando o padrão) e alterando a semântica de todos os compiladores.

Notas de rodapé

  1. A bandeira nó é --use_strict. Não use .

1
Você pode me dizer onde descobriu que "o Node não é suportado?" Isso é inferido apenas pelo fato de não estar documentado?
Push19

Na maioria das vezes. E como não é uma coisa do Node, é uma passagem para a v8.
Evan Carroll

Obrigado! Eu me perguntava por que não consegui encontrá-lo nos documentos do Node Cli .
Galen Long

18

Você também pode fornecer o sinalizador estrito na diretiva intérprete shebang.

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

Mas atualmente (pelo menos antes da v0.9.x), ele sofre os mesmos problemas descritos pelos comentários na resposta do @ chad-scira.


1
envnão permite que você passe parâmetros assim, não é?
Letharion 17/09/14

Funciona para mim, no OSX 10.9.4.
John Lehmann

1
sim - ainda exemplifica uma terrível convenção imposta, que são duas linhas de código concorrentes que precisam estar no topo de um arquivo.
aaaaaa

7
Cuidado, envele funcionará com parâmetros extras como o do OSX, mas não do Linux.
AerandiR 13/09/2015
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.