web-dev-qa-db-fra.com

SyntaxError: Utilisation de const en mode strict

Je travaille avec node.js et, dans l'un de mes fichiers js, j'utilise const dans "strict mode". En essayant de l'exécuter, j'obtiens une erreur:

SyntaxError: Use of const in strict mode.

Quelle est la meilleure pratique pour ce faire?

Modifier:

'use strict'
const MAX_IMAGE_SIZE = 1024*1024; // 1 MB
231
Vivek P

const et let font partie de ECMAScript 2015 (a.k.a. ES6 et Harmony) et n'ont pas été activés par défaut dans Node.js 0.10 ou 0.12. Depuis Node.js 4.x, «Toutes les fonctionnalités d’expédition [ES2015], que V8 considère comme stables, sont activées par défaut sur Node.js et ne nécessitent PAS d’indicateur d’exécution.». Node.js docs a un aperçu des fonctionnalités d'ES2015 activées par défaut et des personnes qui nécessitent un indicateur d'exécution . Donc, en passant à Node.js 4.x ou plus récent, l'erreur devrait disparaître.

Pour activer certaines des fonctionnalités ECMAScript 2015 (notamment const et let) dans Node.js 0.10 et 0.12; démarrez votre programme de nœud avec un drapeau d’harmonie, sinon vous obtiendrez une erreur de syntaxe. Par exemple:

node --harmony app.js

Tout dépend de quel côté se trouve votre js strict. Je vous recommande d'utiliser le mode strict avec les déclarations const du côté serveur et de démarrer le serveur avec l'indicateur d'harmonie. Pour le côté client, vous devez utiliser Babel ou un outil similaire pour convertir ES2015 à ES5, car tous les navigateurs clients ne prennent pas en charge les déclarations const.

274
Alexander

Si cela se produit dans nodejs, cela est dû à l'ancienne version de nodejs. Mettre à jour le noeud en utilisant,

1) Vider le cache du NPM:

Sudo npm cache clean -f

2) Installez un petit assistant appelé 'n'

Sudo npm install -g n

3) Installer la dernière version stable de NodeJS

Sudo n stable

Mettre à jour les instructions nodejs extraites de, https://stackoverflow.com/a/19584407/698072

230
Stranger

Généralement, cette erreur se produit lorsque la version du nœud sur lequel le code est exécuté est plus ancienne que prévu. (c'est-à-dire 0,12 ou plus vieux).

si vous utilisez nvm, veuillez vous assurer que vous utilisez la bonne version du noeud. Vous pouvez vérifier la compatibilité sur node.green pour const en mode strict

J'ai trouvé un problème similaire sur un autre post et posté ma réponse il en détail

21
G G

Une étape importante après la mise à jour de votre noeud consiste à lier son binaire à la dernière version de noeud installée

Sudo ln -sf /usr/local/n/versions/node/6.0.0/bin/node /usr/bin/node  
19
Shri Shinde

Ce n'est probablement pas la solution pour tout le monde, mais c'était pour moi.

Si vous utilisez NVM, vous n'avez peut-être pas activé la bonne version du noeud pour le code que vous exécutez. Après le redémarrage, la version par défaut de votre noeud redevient la version par défaut du système.

Je rencontrais ce problème lorsque je travaillais avec react-native qui fonctionnait bien. Utilisez simplement nvm pour utiliser la bonne version du noeud afin de résoudre ce problème. 

13
boatcoder

Depuis que la question a été posée, le brouillon du mot clé const est déjà un standard de vie dans le cadre de ECMAScript 2015 . De plus, la version actuelle de Node.js prend en charge les déclarations const sans l'indicateur --harmony.

Avec ce qui précède, vous pouvez maintenant exécuter node app.js, avec app.js:

'use strict';
const MB = 1024 * 1024;
...

obtenir à la fois le sucre de syntaxe et les avantages du mode strict.

8
dodev

const n'est pas supporté par ECMAScript. Ainsi, après avoir spécifié le mode strict, vous obtenez une erreur de syntaxe. Vous devez utiliser var au lieu de const si vous voulez que votre code soit compatible avec tous les navigateurs. Je sais, pas la solution idéale, mais c'est ce que c'est. Il existe des moyens de créer des propriétés en lecture seule en JavaScript (voir Les propriétés en lecture seule peuvent-elles être implémentées en JavaScript pur? ), mais je pense que cela pourrait être excessif selon votre scénario.

Ci-dessous se trouve la note de compatibilité de navigateur de MDN :

Compatibilité navigateur

L'implémentation actuelle de const est une extension spécifique à Mozilla et ne fait pas partie de ECMAScript 5. Il est pris en charge par Firefox et Chrome (V8). A partir de Safari 5.1.7 et Opera 12.00, si vous définissez une variable avec const dans ces navigateurs, vous pourrez toujours changer sa valeur ultérieurement. Il n'est pas pris en charge dans Internet Explorer 6-10, mais est inclus dans Internet Explorer 11. Le mot-clé const déclare actuellement le constante dans l'étendue de la fonction (comme les variables déclarées avec var).

Firefox, au moins depuis la version 13, lève une erreur TypeError si vous redéclare une constante. Aucun des principaux navigateurs ne produit d’avis ou des erreurs si vous affectez une autre valeur à une constante. La valeur de retour d’une telle opération est celle de la nouvelle valeur attribuée, mais le la réaffectation échoue uniquement dans Firefox et Chrome (au moins depuis la version 20).

const va être défini par ECMAScript 6, mais avec différent sémantique. Similaire aux variables déclarées avec l'instruction let, les constantes déclarées avec const auront une portée de bloc.

0
Shital Shah

J'ai eu un problème similaire récemment et s'est retrouvé dans ce Q & A. Ce n’est pas la solution recherchée par le PO mais peut aider d’autres personnes aux prises avec un problème similaire.

J'utilise PM2 pour exécuter un projet et sur un serveur de transfert donné, j'avais une très ancienne version de Node, NPM et PM2. J'ai tout mis à jour, cependant, j'ai gardé la même erreur:

SyntaxError: Utilisation de const en mode strict.

J'ai essayé d'arrêter et de démarrer l'application plusieurs fois. Aussi essayé de tout mettre à jour à nouveau. Rien n'a fonctionné. Jusqu'à ce que je remarque un avertissement quand j'ai exécuté pm2 start:

>>>> PM2 en mémoire obsolète, faites:
>>>> $ pm2 update
En mémoire PM2 version: 0.15.10
Version locale de PM2: 3.2.9

Je t'ai eu! Après avoir exécuté pm2 update, j'ai finalement pu exécuter l'application comme prévu. Plus d'erreurs "const in strict mode".

0
Gustavo Straube