El token ‘&&’ no es un separador de declaraciones válido en esta versión

7 minutos de lectura

Avatar de usuario de Manghud
Manghud

En camino de instalar paquete web en mi React Project, el siguiente problema dificulta mi progreso:

último paso para configurar el Webpack

npm run build && node ./dist/main.js

Error en Windows Power Shell/en 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 que prometía configurar el webpack.

https://developerhandbook.com/webpack/webpack-4-from-absolute-scratch/

https://developerhandbook.com/webpack/how-to-configure-scss-modules-for-webpack/

Es porque está en PowerShell, intente ejecutarlo en CMD o Git Bash

Alternativamente (si desea continuar en PS):

(npm run build) -and (node ./dist/main.js)

Tercera alternativa, simplemente ejecútelos por separado,

  • funcionó para el problema de la línea de comando pero creó un problema relacionado con React.

    – Manghud

    8 de enero de 2021 a las 11:08

  • Buen punto sobre la necesidad de un comando diferente en Windows PowerShell (aunque ya no en PowerShell (Core) 7+), pero es importante tener en cuenta que PowerShell -and y -or los operadores son no reemplazos para && y || – funcionan de manera fundamentalmente diferente, descartando efectivamente la salida estándar y devolviendo un solo booleano en su lugar – vea la sección inferior de esta respuesta.

    – mklement0

    23 de marzo de 2021 a las 13:51

  • Yo diría que mencionar el -and alternativa es un poco engañosa ya que dudo que la gente normalmente quiera lo que -and hace (ciertamente no quería eso y solo me di cuenta de esto cuando mi comando se estaba ejecutando). La respuesta solo debe mencionar que para lograr lo mismo en Powershell, use PowerShell versión 7+.

    – István Siroki

    26 oct 2021 a las 15:32

  • Buen punto. Resolvió mi problema. Estaba probando en la terminal.

    – Nadeesha Nawagaththegama

    2 de noviembre de 2022 a las 7:05

Avatar de usuario de Sam Patankar
sam patankar

Descubrí que dentro de PowerShell como mi terminal dentro VS Codereemplazando && en el mando con ; Hizo el truco.

  • ; es el separador de declaraciones en PowerShell, lo que resulta en incondicional secuencia de comandos, análoga a & en cmd.exe – esto es no lo mismo que &&que solo ejecuta el comando RHS si el comando LHS tuvo éxito.

    – mklement0

    26 de abril de 2022 a las 20:26

  • probado, si funciona bien. Por ejemplo: “` git add –all ; git commit -m ‘prueba’; empujar git “`

    – Leo Lanese

    25 oct 2022 a las 11:16


  • @LeoLanese “funciona” si no encontró ningún error en la cadena de ejecución, a lo que se refiere el OP es conditional execution, && normalmente se usa para cadenas de comando que solo pueden continuar la ejecución cuando el anterior fue exitoso, aquí hay un ejemplo de mala práctica para trabajar en una ubicación restringida de escritura, md "C:\Program Files\test"; cd "C:\Program Files\test"; git initva a git init en su directorio actual, podría ser peor… La respuesta de @mklement0 es la más apropiada, y sigue siendo un problema/solución válida cuando usamos el PS de Windows 10 estándar

    – Jonny Soe

    9 de febrero a las 12:44

avatar de usuario de mklement0
mklement0

PowerShell (núcleo) v7+ – pero no Windows PowerShell – ahora hace apoyo && y ||el operadores de cadenas de oleoductosentonces su comando debería funcionar como está allí – consulte esta respuesta para conocer las consideraciones específicas de PowerShell para su uso; consulte a continuación las soluciones alternativas de Windows PowerShell.

Nota conceptual:

  • En todas las conchas que lo soportan (en particular cmd.exe y shells compatibles con POSIX como Bash), && condicionalmente ordena secuencias: ejecuta su comando RHS solo si el comando LHS indicado éxito; || es el inverso: ejecuta el RHS solo si el LHS indicado falla.

  • Esto es importante para evitar la ejecución cuando no tiene sentido hacerlo; por ejemplo, en
    npm run build && node ./dist/main.js solo tiene sentido ejecutar lo que se acaba de construir (con node) si la construcción tuvo éxitoQue es que && asegura.

Windows PowerShell soluciones alternativas:

El mayoría sucinto solución alterna:

npm run build; if ($?) { node ./dist/main.js }

Esto se basa en el automático $? variableque es un valor booleano que indica si el comando más reciente tuvo éxito.

El mayoría robusto solución alternativa, necesaria si los comandos usan 2> redirecciones:

npm run build; if ($LASTEXITCODE -eq 0) { node ./dist/main.js }

Basando la prueba de éxito en la automático $LastExitCode variableque refleja la código de salida del proceso de los más recientemente ejecutados programa externoevita problemas en Windows PowerShell[1] donde la presencia de estándar salida en combinación con la redirección a través de 2> establece por error $? a $false incluso cuando el código de salida del proceso es 0.


[1] Los problemas con 2> las redirecciones se resumen en esta respuesta. También plagan PowerShell (Core) hasta la versión 7.1

El && el operador se usa en linux bash para ejecutar ambos comandos uno tras otro. (Además, si falla el primer comando, el segundo no se ejecutará)

Esto no funciona en PowerShell en Windows, así que simplemente divida ambos comandos y ejecútelos por separado:

npm run build
node ./dist/main.js

Para completar, Powershell puede comportarse de la misma manera cuando lo hace (command1) -and (command2) y && en realidad podría funcionar dependiendo de su versión de PowerShell.

Consulte esto para obtener más información: https://stackoverflow.com/a/564092/2232127

avatar de usuario de ameen trivandrum
amén trivandrum

Resolví el problema actualizando powershell y renombré dir. nombre de la carpeta de ruta eliminando espacios. Ahora funciona correctamente.

Enlace de actualización de Powershell

https://github.com/PowerShell/PowerShell#get-powershell

  • Sí, como se mencionó anteriormente, las versiones 7.0 y superiores de PowerShell (Core) ahora admiten && y ||. No está claro cómo se relacionan los espacios en los nombres de las carpetas con esto. Además, sugiero no usar un vínculo a una versión preliminar obsoleta de PowerShell. Para los usuarios que actualmente usan el legado, viene con el sistema operativo Windows PowerShell edición, cambiando a multiplataforma, instalación bajo demanda PowerShell (núcleo) edition es más que una simple actualización: requiere una migración muy deliberada y la conciencia de que cierto código existente puede romperse.

    – mklement0

    26/04/2022 a las 20:46

Avatar de usuario de Big-jpg
jpg grande

Dado que algunas personas pueden llegar aquí de la misma manera que yo, preguntándome por qué PowerShell no me permite realizar un operador AND condicional entre dos variables dentro de una declaración if.

Lo resolví evaluando la Condición Izquierda con una condición Si, y luego la Condición Derecha inmediatamente dentro de la primera condición verdadera.

Ejemplo que produjo el error:

$Path = "C:\\Temp\test"
$RootPath = "C:\\Temp"
$currentChildren = Get-ChildItem -Force -LiteralPath $Path 
$isEmpty = $currentChildren -eq null

if ($isEmpty && $Path -ne $RootPath) {
    Remove-Item -Force -LiteralPath $Path
    }

$foo = "question"
$bar = "answer"

Ejemplo que usé para resolver el problema:

$Path = "C:\\Temp\test"
$RootPath = "C:\\Temp"
$currentChildren = Get-ChildItem -Force -LiteralPath $Path 
$isEmpty = $currentChildren -eq null

if ($isEmpty) {
    if ($Path -ne $RootPath) {
        Remove-Item -Force -LiteralPath $Path
        }
   }

  • Sí, como se mencionó anteriormente, las versiones 7.0 y superiores de PowerShell (Core) ahora admiten && y ||. No está claro cómo se relacionan los espacios en los nombres de las carpetas con esto. Además, sugiero no usar un vínculo a una versión preliminar obsoleta de PowerShell. Para los usuarios que actualmente usan el legado, viene con el sistema operativo Windows PowerShell edición, cambiando a multiplataforma, instalación bajo demanda PowerShell (núcleo) edition es más que una simple actualización: requiere una migración muy deliberada y la conciencia de que cierto código existente puede romperse.

    – mklement0

    26/04/2022 a las 20:46

Avatar de usuario de Leo Lanese
leo lanese

Tener este problema en la terminal de Windows. La solución es usar ; en cambio && como:

git fetch --all ; git add --all ; git commit -m 'updating things' ; git push

¿Ha sido útil esta solución?