# Configurar el uso de variables de entorno en package.json para Windows

Español | English

Para los que somos usuarios de Windows y a la vez desarrolladores de aplicaciones con Node.js, es común que nos encontremos con problemas que los usuarios de Linux/MAC felizmente desconocen (otros tienen seguro…).

Uno de esos problemas está relacionado con el uso de variables de entorno definidas en los scripts configurados de nuestros ficheros package.json:

{
  ...,
  "scripts":{
    ...,
    "generate-es-v1":"LANGUAGE=ES VERSION=1 npx nuxt generate",
    "generate-es-v2":"LANGUAGE=ES VERSION=2 npx nuxt generate",
    "generate-en-v1":"LANGUAGE=EN VERSION=1 npx nuxt generate",
    "generate-en-v2":"LANGUAGE=EN VERSION=2 npx nuxt generate",
    ...
  },
  ...,
}

package.json

En este caso, cuando ejecutemos desde la consola de Windows el comando npm run generate-es-v1, obtendremos el error 'LANGUAGE' is not recognized as an internal or external command, operable program or batch file.

# cross-env al rescate

Una forma de solucionar este problema es hacer nuestros scripts multiplataforma, añadiendo para ello el paquete cross-env (opens new window) como dependencia de desarrollo adicional a nuestro proyecto. Este paquete se encargará de añadir nuestras variables de entorno antes de que se ejecute nuestro script.

Para ello tendremos que:

  1. Instalar el paquete con npm install --save-dev cross-env.
  2. Añadir un nuevo comando cross-env al principio de nuestros scripts:
    {
      ...,
      "scripts":{
        ...,
        "generate-es-v1":"cross-env LANGUAGE=ES VERSION=1 npx nuxt generate",
        "generate-es-v2":"cross-env LANGUAGE=ES VERSION=2 npx nuxt generate",
        "generate-en-v1":"cross-env LANGUAGE=EN VERSION=1 npx nuxt generate",
        "generate-en-v2":"cross-env LANGUAGE=EN VERSION=2 npx nuxt generate",
        ...
      },
      ...,
    }
    
  3. Y finalmente ejecutar nuestro script como teníamos previsto npm run generate-es-v1.

Es cierto que el proyecto de cross-env se puso en modo mantenimiento a finales del año 2020 por lo que no se agregarán nuevas funcionalidades, sin embargo, sigue siendo completamente válido ya que se seguirán corrigiendo errores y actualizando para futuras versiones de Node.js.

En todo caso, siempre nos quedará la opción de hacer uso del subsistema de Windows para Linux (opens new window), ¿te atreves?