wake-up-neo.com

SyntaxError: Verwendung von const im strikten Modus

Ich arbeite mit node.js und verwende in einer meiner js-Dateien const in "strict mode". Beim Versuch, es auszuführen, erhalte ich eine Fehlermeldung:

SyntaxError: Use of const in strict mode.

Was ist die beste Vorgehensweise, um dies zu tun?

Bearbeiten:

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

Die Variablen const und let sind Teil von ECMAScript 2015 (a.k.a. ES6 und Harmony) und wurden in Node.js 0.10 oder 0.12 nicht standardmäßig aktiviert. Seit Node.js 4.x sind alle Versandfunktionen [ES2015], die V8 für stabil hält, standardmäßig für Node.js aktiviert und erfordern KEINE Laufzeitkennzeichen. “ Node.js docs bietet eine Übersicht darüber, welche ES2015-Funktionen standardmäßig aktiviert sind und wer ein Laufzeitflag benötigt . Bei einem Upgrade auf Node.js 4.x oder neuer sollte der Fehler daher verschwinden.

So aktivieren Sie einige ECMAScript 2015-Funktionen (einschließlich const und let) in Node.js 0.10 und 0.12; Starten Sie Ihr Knotenprogramm mit einem Harmonie-Flag, andernfalls erhalten Sie einen Syntaxfehler. Zum Beispiel:

node --harmony app.js

Es hängt alles davon ab, auf welcher Seite sich Ihr striktes js befindet. Ich würde die Verwendung des strikten Modus mit const-Deklarationen auf Ihrer Serverseite empfehlen und den Server mit dem Harmony-Flag starten. Auf der Clientseite sollten Sie Babel oder ein ähnliches Tool zum Konvertieren von ES2015 nach ES5 verwenden, da nicht alle Client-Browser die Deklarationen const unterstützen.

274
Alexander

Wenn dies in nodejs geschieht, liegt dies an der älteren Version von nodejs. Knoten aktualisieren mit,

1) Den NPM-Cache löschen:

Sudo npm cache clean -f

2) Installiere einen kleinen Helfer namens 'n'

Sudo npm install -g n

3) Installieren Sie die neueste stabile NodeJS-Version

Sudo n stable

Aktualisieren Sie die Anweisungen von nodejs aus https://stackoverflow.com/a/19584407/698072 .

230
Stranger

Normalerweise tritt dieser Fehler auf, wenn die Version des Knotens, auf der der Code ausgeführt wird, älter ist als erwartet. (d. h. 0,12 oder älter).

wenn Sie nvm verwenden, stellen Sie bitte sicher, dass Sie die richtige Version des Knotens verwenden. Sie können die Kompatibilität auf node.green für const im strikten Modus überprüfen

Ich habe ein ähnliches Problem in einem anderen Beitrag gefunden und meine Antwort dort im Detail

21
G G

Ein wichtiger Schritt nach der Aktualisierung Ihres Knotens ist das Verknüpfen der binären Knoten mit der zuletzt installierten Knotenversion

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

Dies ist wahrscheinlich nicht die Lösung für alle, aber es war für mich.

Wenn Sie NVM verwenden, haben Sie möglicherweise nicht die richtige Version des Knotens für den Code aktiviert, den Sie ausführen. Nach dem Neustart ändert sich Ihre Standardversion des Knotens wieder in den Systemstandard.

Ich fand dies bei der Arbeit mit React-Native, die gut funktioniert hatte. Verwenden Sie einfach nvm, um die richtige Version des Knotens zu verwenden, um dieses Problem zu lösen. 

13
boatcoder

Seit dem Zeitpunkt, zu dem die Frage gestellt wurde, ist der Entwurf für das Schlüsselwort const im Rahmen von ECMAScript 2015 bereits ein Lebensstandard. Auch die aktuelle Version von Node.js unterstützt const-Deklarationen ohne das Flag --harmony.

Mit dem oben genannten können Sie jetzt node app.js ausführen, mit app.js:

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

sowohl die Syntaxzucker als auch die Vorteile des strikten Modus.

8
dodev

const wird von ECMAScript nicht unterstützt. Nachdem Sie den strikten Modus angegeben haben, erhalten Sie einen Syntaxfehler. Sie müssen var anstelle von const verwenden, wenn Ihr Code mit allen Browsern kompatibel sein soll. Ich weiß, nicht die ideale Lösung, aber es ist was es ist. Es gibt Möglichkeiten, schreibgeschützte Eigenschaften in JavaScript zu erstellen (siehe Können schreibgeschützte Eigenschaften in Pure JavaScript implementiert werden? ), aber ich denke, es kann je nach Szenario zu viel sein.

Nachfolgend finden Sie Hinweise zur Browserkompatibilität aus MDN :

Browser-Kompatibilität

Die aktuelle Implementierung von const ist eine Mozilla-spezifische Erweiterung und ist nicht Bestandteil von ECMAScript 5. Es wird in Firefox & Chrome .__ unterstützt. (V8). Ab Safari 5.1.7 und Opera 12.00, wenn Sie eine Variable definieren Mit const in diesen Browsern können Sie den Wert später noch ändern. Es wird in Internet Explorer 6-10 nicht unterstützt, ist jedoch in .__ enthalten. Internet Explorer 11. Das Schlüsselwort const deklariert derzeit das Konstante im Funktionsumfang (wie mit var deklarierte Variablen).

Firefox wirft zumindest seit Version 13 einen TypeError aus, wenn Sie eine Konstante neu deklarieren. Keiner der Hauptbrowser erzeugt Hinweise oder Fehler, wenn Sie einer Konstanten einen anderen Wert zuweisen. Der Rückgabewert einer solchen Operation ist die des neu zugewiesenen Wertes, aber die Die Neuzuweisung ist nur in Firefox und Chrome (zumindest seit Version 20) nicht erfolgreich.

const wird von ECMAScript 6 definiert, jedoch mit unterschiedlichen Semantik. Ähnlich wie mit der let-Anweisung deklarierte Variablen Konstanten, die mit const deklariert werden, werden in Blockform angegeben.

0
Shital Shah

Ich hatte kürzlich ein ähnliches Problem und landete in diesem Q & A. Dies ist nicht die Lösung, nach der das OP gesucht hat, aber es kann anderen mit ähnlichen Problemen helfen.

Ich benutze PM2 , um ein Projekt auszuführen, und in einem bestimmten Staging-Server hatte ich eine wirklich alte Version von Node, NPM und PM2. Ich habe alles aktualisiert, habe jedoch den gleichen Fehler beibehalten:

SyntaxError: Verwendung von const im strikten Modus.

Ich habe mehrmals versucht, die Anwendung zu stoppen und zu starten. Auch versucht, alles noch einmal zu aktualisieren. Nichts hat geklappt. Bis ich beim Ausführen von pm2 start eine Warnung bemerkte:

>>>> PM2 im Speicher ist veraltet, tun Sie:
>>>> $ pm2-Update
Im Speicher PM2-Version: 0.15.10
Lokale PM2-Version: 3.2.9

Erwischt! Nachdem ich pm2 update ausgeführt hatte, konnte ich die Anwendung wie erwartet ausführen. Keine "const im strikten Modus" Fehler mehr.

0
Gustavo Straube