start proyecto produccion node instalar crear como comandos node.js batch-file npm

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.

  1. El directorio actual es C:/Temp/HDC .
  2. El comando pushd hui-components-style guarda C:/Temp/HDC en la pila y establece como nuevo directorio actual C:/Temp/HDC/hui-components-style .
  3. Se ejecuta npm que modifica el directorio actual.
  4. El comando popd obtiene C:/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:

  1. Empuja la ruta del directorio actual en la pila.
  2. Empuja el estado de las extensiones de comando en la pila.
  3. Impulsa el estado de expansión demorada en la pila.
  4. Empuja la dirección de memoria de la tabla de variables de entorno actual en la pila.
  5. 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

  1. elimina la tabla de entorno actual;
  2. 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;
  3. muestra el estado de expansión demorada de la pila y deshabilita / habilita la expansión demorada en consecuencia;
  4. muestra el estado de las extensiones de comando de la pila y deshabilita / habilita las extensiones de comando en consecuencia;
  5. 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.