Das Token „&&“ ist in dieser Version kein gültiges Anweisungstrennzeichen
Lesezeit: 6 Minuten
Manghud
Auf dem Weg zur Installation Webpack Bei meinem React-Projekt behindert das folgende Problem meinen Fortschritt:
letzter Schritt zur Konfiguration des Webpacks
npm run build && node ./dist/main.js
Fehler in Windows Power Shell / in Visual Studio Code
PS C:\Users\pythonbuddha\Desktop\to_experiment\to-do-list> npm run build && node ./dist/main.js
At line:1 char:15
+ npm run build && node ./dist/main.js
+ ~~
The token '&&' is not a valid statement separator in this version.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : InvalidEndOfLine
Tutorial, das die Konfiguration des Webpacks versprach
Das liegt daran, dass Sie sich in PowerShell befinden. Versuchen Sie, es auszuführen CMD oder Git Bash
Alternativ (wenn Sie in PS fortfahren möchten):
(npm run build) -and (node ./dist/main.js)
3. Alternative: Führen Sie sie einfach separat aus.
Es funktionierte bei Befehlszeilenproblemen, verursachte jedoch ein Problem im Zusammenhang mit React.
– Manghud
8. Januar 2021 um 11:08
Guter Hinweis darauf, dass in Windows PowerShell ein anderer Befehl benötigt wird (allerdings nicht mehr in PowerShell (Core) 7+), aber es ist wichtig zu beachten, dass PowerShell -and Und -or Betreiber sind nicht Ersatz für && Und || – Sie funktionieren grundlegend anders, indem sie die Standardausgabe effektiv verwerfen und stattdessen einen einzelnen Booleschen Wert zurückgeben – siehe den unteren Abschnitt dieser Antwort.
– mklement0
23. März 2021 um 13:51 Uhr
Ich würde argumentieren, dass die Erwähnung des -and Alternative ist etwas irreführend, da ich bezweifle, dass die Leute normalerweise was wollen würden -and tut (das wollte ich auf keinen Fall und habe es erst gemerkt, als mein Befehl ausgeführt wurde). In der Antwort sollte nur erwähnt werden, dass Sie PowerShell Version 7+ verwenden, um dasselbe in Powershell zu erreichen.
– István Siroki
26. Okt. 2021 um 15:32 Uhr
Guter Punkt. Es hat mein Problem gelöst. Ich habe es am Terminal versucht.
– Nadeesha Nawagaththegama
2. November 2022 um 7:05 Uhr
Sam Patankar
Ich habe das in PowerShell als mein Terminal darin gefunden VS Codeersetzen && im Befehl mit ; hat es geschafft.
; ist das Anweisungstrennzeichen in PowerShell, was zu Folgendem führt: bedingungslos Reihenfolge der Befehle, analog zu & In cmd.exe – das ist nicht das Gleiche wie &&der nur den RHS-Befehl ausführt wenn der LHS-Befehl erfolgreich war.
@LeoLanese es „funktioniert“, wenn in der Ausführungskette kein Fehler aufgetreten ist, auf den sich das OP bezogen hat conditional execution, && Wird normalerweise für Befehlsketten verwendet, die die Ausführung nur dann fortsetzen können, wenn die vorherige erfolgreich war. Hier ist ein Beispiel für eine schlechte Vorgehensweise für die Arbeit an einem Speicherort mit eingeschränktem Schreibzugriff. md "C:\Program Files\test"; cd "C:\Program Files\test"; git inites wird git init Stattdessen könnte es in Ihrem aktuellen Verzeichnis schlimmer sein … Die Antwort von @mklement0 ist die am besten geeignete und immer noch ein gültiges Problem/eine gültige Problemumgehung, wenn wir das PS von Vanilla Windows 10 verwenden
– Jonny Soe
9. Februar um 12:44
mklement0
PowerShell (Core) v7+ – Aber nichtWindows PowerShell – Jetzt tut Unterstützung && Und ||Die Pipeline-KettenbetreiberSo Ihr Befehl sollte so funktionieren, wie er dort ist – In dieser Antwort finden Sie PowerShell-spezifische Überlegungen zu ihrer Verwendung. Unten finden Sie Windows PowerShell-Problemumgehungen.
Konzeptioneller Hinweis:
In allen Shells, die es unterstützen (insbesondere cmd.exe und POSIX-kompatible Shells wie Bash), &&bedingt Sequenziert Befehle: Es führt seinen RHS-Befehl nur aus, wenn der LHS-Befehl angegeben ist Erfolg; || ist das Gegenteil: Es führt die RHS nur aus, wenn die LHS dies anzeigt Versagen.
Dies ist wichtig, um die Ausführung zu verhindern, wenn dies keinen Sinn ergibt. z.B. in npm run build && node ./dist/main.js Es macht nur Sinn, das auszuführen, was gerade erstellt wurde (mit node) wenn der Build erfolgreich warwelches ist was && stellt sicher.
Windows PowerShell Problemumgehungen:
Der am meisten prägnant Problemumgehung:
npm run build; if ($?) { node ./dist/main.js }
Dies baut auf dem auf automatisch $? Variableein boolescher Wert, der angibt, ob der letzte Befehl erfolgreich war.
Der am meisten robust Problemumgehung, erforderlich wenn die Befehle verwenden 2> Umleitungen:
npm run build; if ($LASTEXITCODE -eq 0) { node ./dist/main.js }
Basierend auf dem Erfolgstest automatisch $LastExitCode Variablewas die widerspiegelt Prozess-Exit-Code der zuletzt Hingerichteten externes Programmvermeidet Probleme in Windows PowerShell[1] wo die Anwesenheit von stderr Ausgabe in Kombination mit der Weiterleitung über 2> fälschlicherweise eingestellt $? Zu $false auch wenn der Prozess-Exit-Code lautet 0.
[1] Die Probleme mit 2> Weiterleitungen sind in dieser Antwort zusammengefasst. Sie plagen auch PowerShell (Core) bis Version 7.1
Der && Der Operator wird unter Linux verwendet bash um beide Befehle nacheinander auszuführen. (Auch wenn der erste Befehl fehlschlägt, wird der zweite nicht ausgeführt)
Dies funktioniert in PowerShell unter Windows nicht. Teilen Sie daher einfach beide Befehle auf und führen Sie sie separat aus:
npm run build
node ./dist/main.js
Der Vollständigkeit halber: Powershell kann sich dabei genauso verhalten (command1) -and (command2) Und && könnte je nach Ihrer PowerShell-Version tatsächlich funktionieren.
Weitere Informationen finden Sie hier: https://stackoverflow.com/a/564092/2232127
Ameen Trivandrum
Ich habe das Problem gelöst, indem ich Powershell aktualisiert und dir umbenannt habe. Pfadordnernamen durch Entfernen von Leerzeichen. Jetzt funktioniert es einwandfrei.
Ja, wie bereits erwähnt, werden jetzt PowerShell (Core)-Versionen 7.0 und höher unterstützt && Und ||. Es ist unklar, in welcher Beziehung Leerzeichen in Ordnernamen dazu stehen. Außerdem empfehle ich, keinen Link zu einer veralteten Vorschauversion von PowerShell zu verwenden. Für Benutzer, die derzeit das Vorgängermodell verwenden, ist das Betriebssystem im Lieferumfang enthalten Windows PowerShell Edition, Umstellung auf die plattformübergreifende Installation bei Bedarf PowerShell (Kern) Edition ist mehr als nur ein Upgrade: Sie erfordert eine sehr bewusste Migration und das Bewusstsein, dass bestimmter vorhandener Code möglicherweise kaputt geht.
– mklement0
26. April 2022 um 20:46 Uhr
Großes JPG
Da einige Leute möglicherweise auf die gleiche Weise hierher kommen wie ich, fragen sie sich, warum PowerShell es mir nicht erlaubt, einen bedingten UND-Operator zwischen zwei Variablen innerhalb einer if-Anweisung auszuführen.
Ich habe es gelöst, indem ich die linke Bedingung mit einer If-Bedingung und dann die rechte Bedingung direkt innerhalb der ersten wahren Bedingung ausgewertet habe.
Ja, wie bereits erwähnt, werden jetzt PowerShell (Core)-Versionen 7.0 und höher unterstützt && Und ||. Es ist unklar, in welcher Beziehung Leerzeichen in Ordnernamen dazu stehen. Außerdem empfehle ich, keinen Link zu einer veralteten Vorschauversion von PowerShell zu verwenden. Für Benutzer, die derzeit das Vorgängermodell verwenden, ist das Betriebssystem im Lieferumfang enthalten Windows PowerShell Edition, Umstellung auf die plattformübergreifende Installation bei Bedarf PowerShell (Kern) Edition ist mehr als nur ein Upgrade: Sie erfordert eine sehr bewusste Migration und das Bewusstsein, dass bestimmter vorhandener Code möglicherweise kaputt geht.
– mklement0
26. April 2022 um 20:46 Uhr
Leo Lanese
Dieses Problem tritt auf dem Windows-Terminal auf. Die Lösung ist zu verwenden ; stattdessen && wie: