node.js - proyecto - npm install
Cambiar el comando del directorio cd... no funciona en el archivo por lotes despuĆ©s de la instalaciĆ³n de npm (1)
Tengo el siguiente comando en un archivo bat.
echo STEP12
cd HDC
git config --global url."https://".insteadOf git://
echo STEP13
cd hui-components-style
npm install --registry http://localhost:23510
cd ..
En STEP13, después de npm install command
cd..
no funciona.
No va a volver a la carpeta HDC principal.
Tengo otros comandos para ejecutar en la carpeta principal. ¿Estoy cometiendo algunos errores de sintaxis?
npm
es en Windows un script por lotes de Windows con la extensión de archivo
.cmd
y no un ejecutable que en este caso modifica el directorio actual y no lo restaura antes de salir.
Sugiero usar en lugar de
cd hui-components-style
El comando
pushd hui-components-style
y usar en lugar de
cd ..
El comando
popd
Para obtener detalles sobre los dos comandos: directorio push y pop, abra una ventana de símbolo del sistema y ejecute
pushd /?
y
popd /?
para mostrar la ayuda de cada comando.
Una explicación para una mejor comprensión utilizando rutas absolutas.
-
El directorio actual es
C:/Temp/HDC
. -
El comando
pushd hui-components-style
guardaC:/Temp/HDC
en la pila y establece como nuevo directorio actualC:/Temp/HDC/hui-components-style
. -
Se ejecuta
npm
que modifica el directorio actual. -
El comando
popd
obtieneC:/Temp/HDC
de la pila y establece este directorio como directorio actual independiente de qué directorio es el directorio actual.
Entonces el código con esas dos modificaciones es:
echo STEP12
cd HDC
git config --global url."https://".insteadOf git://
echo STEP13
pushd hui-components-style
call npm.cmd install --registry http://localhost:23510
popd
Es necesario usar la
call
comando porque
npm
es un archivo por lotes con el nombre de archivo completo
npm.cmd
y no un ejecutable, es decir
call npm.cmd install --registry http://localhost:23510
De lo contrario, el procesamiento de comandos del archivo por lotes actual
continúa
en
npm.cmd
y los comandos que estén en el archivo por lotes actual después de que el procesador de comandos de Windows nunca procese la línea con
npm
.
Para obtener detalles sobre los diversos métodos para ejecutar un archivo por lotes, consulte la respuesta en
¿Cómo llamar a un archivo por lotes que está un nivel por encima del directorio actual?
.
Y vea también la respuesta en el
comando copiar en el archivo por lotes no se ejecuta cuando se llama al archivo por lotes desde otro archivo por lotes, pero se ejecuta cuando hago doble clic
.
Alternativamente, también sería posible usar el siguiente código:
echo STEP12
cd HDC
git config --global url."https://".insteadOf git://
echo STEP13
cd hui-components-style
setlocal
call npm.cmd install --registry http://localhost:23510
endlocal
cd ../
El comando setlocal hace lo siguiente:
- Empuja la ruta del directorio actual en la pila.
- Empuja el estado de las extensiones de comando en la pila.
- Impulsa el estado de expansión demorada en la pila.
- Empuja la dirección de memoria de la tabla de variables de entorno actual en la pila.
- Crea una copia de la tabla de variables de entorno actual en la memoria y activa esta nueva tabla de variables de entorno.
Esos 5 pasos siempre se realizan incluso cuando se llama a
setlocal
con 1 o 2 de las 4 opciones posibles
EnableExtensions
,
DisableExtensions
,
EnableDelayedExpansion
,
DisableDelayedExpansion
para cambiar
adicionalmente el
estado de las extensiones de comando y / o la expansión variable de entorno retardada.
Ahora el archivo por lotes
npm.cmd
puede cambiar el directorio de trabajo actual, puede agregar, eliminar y modificar variables de entorno, puede habilitar / deshabilitar las extensiones de comando y puede habilitar / deshabilitar el uso de la expansión demorada.
Pero todas esas modificaciones en el entorno de procesamiento de comandos no importan después del siguiente comando endlocal porque endlocal
- elimina la tabla de entorno actual;
- saca la dirección de memoria de la tabla de entorno anterior de la pila y usa esta dirección, lo que resulta en la restauración de las variables de entorno iniciales;
- muestra el estado de expansión demorada de la pila y deshabilita / habilita la expansión demorada en consecuencia;
- muestra el estado de las extensiones de comando de la pila y deshabilita / habilita las extensiones de comando en consecuencia;
- abre la ruta del directorio actual anterior desde la pila y establece el directorio actual en esta ruta para restaurar el directorio actual.
Para ejemplos que demuestran que ver las respuestas en
- ¿Por qué se ignora mi cd% myVar%? (ejemplo para la gestión actual del directorio de trabajo)
- Hacer eco de una URL en Batch (ejemplo para la gestión de expansión de variables de entorno y retardadas)
Los nombres de los dos comandos se explican por sí solos:
- setlocal ... configura el entorno del proceso de comando local basado en el entorno actual.
- endlocal ... finaliza el entorno del proceso de comando local y restaura el entorno anterior.