Ejecute scripts que establecen y usan variables de entorno en todas las plataformas
Aviso: Cross-INV todavía funciona bien, pero está en modo de mantenimiento. No se agregarán nuevas características, solo se solucionarán errores serios y de caso común, y solo se mantendrán al día con Node.js con el tiempo. Obtenga más información
La mayoría de los informes del sistema de Windows se ahogarán cuando establezca variables de entorno con NODE_ENV=production como esa. (La excepción es Bash en Windows, que usa Bash nativa). Del mismo modo, hay una diferencia en la forma en que los comandos de Windows y Posix utilizan variables de entorno. Con Posix, usa: $ENV_VAR y en Windows usa %ENV_VAR% .
cross-env lo hace para que pueda tener un solo comando sin preocuparse por configurar o usar la variable de entorno correctamente para la plataforma. Simplemente configúrelo como lo haría si se ejecuta en un sistema POSIX, y cross-env se encargará de configurarlo correctamente.
cross-env vs cross-env-shell Este módulo se distribuye a través de NPM, que se incluye con nodo y debe instalarse como una de devDependencies de su proyecto:
npm install --save-dev cross-env
¡ADVERTENCIA! Asegúrese de que cuando esté instalando paquetes, deletree las cosas correctamente para evitar la instalación de malware por error.
Nota: La versión 7 de Cross -NV solo admite Node.js 10 y superior, para usarlo en Node.js 8 o Instalación inferior Versión 6
npm install --save-dev cross-env@6
Yo uso esto en mis scripts NPM:
{
"scripts" : {
"build" : " cross-env NODE_ENV=production webpack --config build/webpack.config.js "
}
} En última instancia, el comando que se ejecuta (usando cross-spawn ) es:
webpack --config build/webpack.config.js
La variable de entorno NODE_ENV se establecerá mediante cross-env
Puede establecer múltiples variables de entorno a la vez:
{
"scripts" : {
"build" : " cross-env FIRST_ENV=one SECOND_ENV=two node ./my-program "
}
}También puede dividir un comando en varios o separar la declaración de variables de entorno de la ejecución de comando real. Puedes hacerlo de esta manera:
{
"scripts" : {
"parentScript" : " cross-env GREET= " Joe " npm run childScript " ,
"childScript" : " cross-env-shell " echo Hello $GREET " "
}
} Donde childScript contiene el comando real para ejecutar y parentScript establece las variables de entorno para usar. Luego, en lugar de ejecutar el child -script, ejecuta el padre. Esto es bastante útil para lanzar el mismo comando con diferentes variables Env o cuando las variables de entorno son demasiado largas para tener todo en una sola línea. También significa que puede usar la sintaxis $GREET Env VAR incluso en Windows, lo que generalmente requeriría que sea %GREET% .
Si precede a un signo de dólar con un número impar de barras de retroceso, la declaración de expresión no será reemplazada. Tenga en cuenta que esto significa invertidos traseros después de que tuvo lugar el escape de la cadena JSON. "FOO=\$BAR" no será reemplazado. Sin embargo, se reemplazará "FOO=\\$BAR" .
Por último, si desea pasar una cadena JSON (por ejemplo, al usar TS-Loader), puede hacer lo siguiente:
{
"scripts" : {
"test" : " cross-env TS_NODE_COMPILER_OPTIONS={ \" module \" : \" commonjs \" } node some_file.test.ts "
}
} Preste especial atención a la barra de de triple injuria (\) antes de las cotizaciones dobles (") y la ausencia de citas individuales (') . Ambas condiciones deben cumplirse para trabajar tanto en Windows como en UNIX.
cross-env vs cross-env-shell El módulo de cross-env expone dos contenedores: cross-env y cross-env-shell . El primero ejecuta comandos usando cross-spawn , mientras que el segundo usa la opción shell desde spawn del nodo.
El caso de uso principal para cross-env-shell es cuando necesita una variable de entorno para establecerse en un script de shell en línea completo, en lugar de solo un comando.
Por ejemplo, si desea que la variable de entorno se aplique a varios comandos en serie, deberá envolverlos en citas y usar cross-env-shell en lugar de cross-env .
{
"scripts" : {
"greet" : " cross-env-shell GREETING=Hi NAME=Joe " echo $GREETING && echo $NAME " "
}
} La regla general es: si desea pasar a un comando cross-env que contenga caracteres especiales de shell que desee interpretar , entonces use cross-env-shell . De lo contrario, se adhieren a cross-env .
En Windows, debe usar cross-env-shell , si desea manejar eventos de señal dentro de su programa. Un caso común para eso es cuando desea capturar un evento SIGINT invocado presionando Ctrl + C en la interfaz de línea de comandos.
Tenga en cuenta que npm usa cmd de forma predeterminada y eso no admite la sustitución del comando, por lo que si desea aprovechar eso, entonces debe actualizar su .npmrc para establecer el script-shell en PowerShell. Obtenga más información aquí.
Originalmente creé esto para resolver un problema que estaba teniendo con mis scripts NPM en Angular-Formly. Esto hizo que contribuir al proyecto sea mucho más fácil para los usuarios de Windows.
env-cmd : lee variables de entorno de un archivo en su lugar@naholyr/cross-env - cross-env con soporte para establecer valores predeterminados ¿Buscas contribuir? Busque la buena etiqueta del primer número.
Por favor presente un problema para errores, documentación faltante o comportamiento inesperado.
Ver errores
Este proyecto está en modo de mantenimiento y no se considerarán nuevas solicitudes de funciones.
Obtenga más información
Gracias a estas personas (Key Emoji):
Kent C. Dodds ? | Ya zhuang ? | James Harris | Compumike08 ? | Daniel Rodríguez Rivero ? | Jonas Keinholz ? | Hugo madera ? |
Thiebaud Thomas ? | Daniel Rey López | Amila Welihinda ? | Paul Betts ? | Turner Hayes ? | Suhas Karanth | Sven |
D. Nicolás López Zelaya | Johan Hernández | Jordan Nielson ? | Jason Cooke | bibo5088 | Eric Berry ? | Michaël de Boey |
Lauri Eskola | devuxer | Daniel |
Este proyecto sigue la especificación de todos los contribuyentes. ¡Contribuciones de cualquier tipo bienvenido!
Nota: Esto se agregó tarde al proyecto. Si ha contribuido a este proyecto de alguna manera, haga una solicitud de extracción para agregar a la lista siguiendo las instrucciones en el
CONTRIBUTING.md
MIT