¿Cómo puedo usar las variables Vite env en vite.config.js?

4 minutos de lectura

Matt - Renunciar al avatar de usuario de Github
Matt – Abandona Github

Con lo siguiente .env en mi proyecto Vite:

# To prevent accidentally leaking env variables to the client, only
# variables prefixed with VITE_ are exposed to your Vite-processed code

VITE_NAME=Wheatgrass
VITE_PORT=8080

¿Cómo puedo usar VITE_PORT en mi vite.config.js?

Matt - Renunciar al avatar de usuario de Github
Matt – Abandona Github

Puedes cargar el app level variables env y agregarlas a la Node level variables ambientales:

import { defineConfig, loadEnv } from 'vite';
import vue from '@vitejs/plugin-vue';


export default ({ mode }) => {
    process.env = {...process.env, ...loadEnv(mode, process.cwd())};

    // import.meta.env.VITE_NAME available here with: process.env.VITE_NAME
    // import.meta.env.VITE_PORT available here with: process.env.VITE_PORT

    return defineConfig({
        plugins: [vue()],

        server: {
            port: parseInt(process.env.VITE_PORT),
        },
    });
}

  • Si lo anterior no funciona para usted (por ejemplo, desea importar una variable que no tiene el prefijo VITE_. Prueba esto: process.env = { ...process.env, ...loadEnv(mode, process.cwd(), '') }; El prefijo (tercer argumento) marca la diferencia aquí.

    – F. Müller

    7 de febrero de 2022 a las 13:27


  • Con respecto a server.port tarea, mi vite.config.ts me da el error “El tipo ‘cadena’ no se puede asignar al tipo ‘número'”. ¿Cómo arreglo eso?

    –Brent Arias

    12 ene a las 19:46

  • @BrentArias Las variables de entorno siempre son cadenas, pero las definiciones de tipo para Vite esperan un número allí. Usar parseInt.

    – robere2

    14 de enero a las 21:26

  • gracias funciona en el archivo vite.config.ts

    – PASO

    1 abr a las 16:46

  • PRECAUCIÓN: Mejor uso Object.assign(process.env, loadEnv(mode, process.cwd())) en lugar de desestructurar process.env! Cuando agregué las variables env de esa manera, las claves perdieron su insensibilidad a mayúsculas y minúsculas de alguna manera (ejecutándose en Windows). Para ser específicos, correr npx vite me falló porque process.env.SYSTEMROOT es indefinido, mientras que process.env.SystemRoot Se define. Esto ya no sucede cuando uso Object.assign en cambio.

    – Huelga Contra

    9 abr a las 14:09

Avatar de usuario de Goutham JM
Goutham JM

Si la solución anterior de @matt no funciona para usted, cambie el vite.config.ts/ vite.config.js como abajo

1ra solución

import { defineConfig, loadEnv } from 'vite';
import vue from '@vitejs/plugin-vue';

export default defineConfig(({ mode }) => {

const env = loadEnv(
  'mock', 
  process.cwd(),
  '' 
)
  const processEnvValues = {
    'process.env': Object.entries(env).reduce(
      (prev, [key, val]) => {
        return {
          ...prev,
          [key]: val,
        }
      },
      {},
    )
  }

  return {
    plugins: [vue()],
    define: processEnvValues
  }
}

2da solución

import { defineConfig, loadEnv } from 'vite';
import vue from '@vitejs/plugin-vue';


export default ({ mode }) => {
    process.env = Object.assign(process.env, loadEnv(mode, process.cwd(), ''));

    return defineConfig({
        plugins: [vue()],
    });
}

  • ¿Dónde puedo colocar un archivo console.log para ver los valores detrás de ‘definir’?

    – Juegos de sombras

    5 ene a las 19:42

  • Debería funcionar después processEnvVales si no es posible , lo comprobaré una vez

    – GouthamJM

    9 de enero a las 5:27

  • Un console.log after no imprime ningún registro en el terminal ni en la consola del desarrollador web.

    – Juegos de sombras

    9 de enero a las 11:39

Tal vez esto pueda ser útil para alguien que esté trabajando con react and vite.

vite.config.js

import { defineConfig, loadEnv } from "vite";
import react from "@vitejs/plugin-react";

// https://vitejs.dev/config/
// export default defineConfig({
//   plugins: [react()],
// })

export default defineConfig(({ mode }) => {
  const env = loadEnv("mock", process.cwd(), "");
  const processEnvValues = {
    "process.env": Object.entries(env).reduce((prev, [key, val]) => {
      console.log(key, val);
      return {
        ...prev,
        [key]: val,
      };
    }, {}),
  };

  return {
    plugins: [react()],
    define: processEnvValues,
  };
});

Cómo probar:

1.- Agrega estas variables a una nueva .env o .env.local archivo

REACT_APP_MAILCHIMP_URL="https://gmail.xxxx.com/subscribe/post"
REACT_APP_MAILCHIMP_U="xxxxxxxxxxxxxxxxx"
REACT_APP_MAILCHIMP_ID="YYYYYYYYYYYY"

2.- Añadir un nuevo componente componente/Prueba.js archivo

export const Test = () => {
  console.log(import.meta.env.REACT_APP_MAILCHIMP_URL); 
  console.log(import.meta.env.REACT_APP_MAILCHIMP_U); 
  console.log(import.meta.env.REACT_APP_MAILCHIMP_ID); 

  const a_var = `${process.env.REACT_APP_MAILCHIMP_URL}`;
  console.log(a_var);

  return (

    <div>
      <small> You are running this application in mode.: 
      <b>{process.env.NODE_ENV}</b>
      </small>

      <div>
        <small> REACT_APP_NOT_SECRET_CODE:  
        <b> {process.env.REACT_APP_MAILCHIMP_URL}</b>
        </small>
      </div>
    </div>
  );
};

3.- Añadir componente Test a Aplicación.js archivo

import "./App.css";

import { Test } from "./components/Test";

function App() {
  return (
    <div className="App">
      <Test />
    </div>
  );
}

export default App;

  • Iba a escribir lo mismo por mi cuenta, pero aquí tienes mi amigo, gracias.

    – JEX

    11 abr a las 20:12

¿Ha sido útil esta solución?