Wie kann ich Vite-Umgebungsvariablen in vite.config.js verwenden?

Lesezeit: 4 Minuten

Matt – Gib den Benutzer-Avatar von Github auf
Matt – Gib Github auf

Mit den folgenden .env in meinem Vite-Projekt:

# 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

Wie kann ich verwenden VITE_PORT in meinem vite.config.js?

Matt – Gib den Benutzer-Avatar von Github auf
Matt – Gib Github auf

Sie können die laden app level env-Variablen und fügen Sie sie dem hinzu Node level Umgebungsvariablen:

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),
        },
    });
}

  • Wenn das oben Gesagte bei Ihnen nicht funktioniert (z. B. Sie möchten eine Variable importieren, der nicht das Präfix „ VITE_. Versuche dies: process.env = { ...process.env, ...loadEnv(mode, process.cwd(), '') }; Das Präfx (3. Argument) macht hier tatsächlich den Unterschied.

    – F. Müller

    7. Februar 2022 um 13:27 Uhr


  • Bezüglich der server.port Aufgabe, mein vite.config.ts gibt mir die Fehlermeldung „Typ ‚String‘ kann nicht dem Typ ‚Nummer‘ zugewiesen werden“. Wie kann ich das beheben?

    – Brent Arias

    12. Januar um 19:46 Uhr

  • @BrentArias Umgebungsvariablen sind immer Zeichenfolgen, aber die Typdefinitionen für Vite erwarten dort eine Zahl. Verwenden parseInt.

    – robere2

    14. Januar um 21:26

  • Danke, es funktioniert in der Datei vite.config.ts

    – TEMPO

    1. April um 16:46 Uhr

  • ACHTUNG: Bessere Verwendung Object.assign(process.env, loadEnv(mode, process.cwd())) statt zu zerstören process.env! Als ich die Umgebungsvariablen auf diese Weise hinzufügte, verloren die Schlüssel irgendwie ihre Groß-/Kleinschreibung (unter Windows). Genauer gesagt: Laufen npx vite ist für mich gescheitert, weil process.env.SYSTEMROOT ist undefiniert, while process.env.SystemRoot Ist definiert. Dies passiert nicht mehr, wenn ich es verwende Object.assign stattdessen.

    – StrikeAgainst

    9. April um 14:09

Benutzeravatar von Goutham JM
Goutham JM

Wenn die obige Lösung von @matt für Sie nicht funktioniert, ändern Sie sie vite.config.ts/ vite.config.js Wie unten

1. Lösung

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
  }
}

2. Lösung

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()],
    });
}

  • Wo kann ich ein console.log platzieren, um die Werte hinter „define“ zu sehen?

    – SchattenSpiele

    5. Januar um 19:42 Uhr

  • Danach sollte es funktionieren processEnvVales Wenn es nicht möglich ist, werde ich es einmal überprüfen

    – Goutham JM

    9. Januar um 17:27 Uhr

  • Ein console.log danach druckt keine Protokolle auf dem Terminal oder in der Webdeveloper-Konsole aus.

    – SchattenSpiele

    9. Januar um 11:39 Uhr

Vielleicht kann dies für jemanden nützlich sein, der mit React und Vite arbeitet

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,
  };
});

So testen Sie:

1.- Fügen Sie diese Variablen zu einem neuen hinzu .env oder .env.local Datei

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

2.- Fügen Sie eine neue Komponente hinzu Komponente/Test.js Datei

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.- Testkomponente hinzufügen App.js Datei

import "./App.css";

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

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

export default App;

  • Ich wollte das Gleiche selbst schreiben, aber hier bist du mein Freund, danke.

    – JEX

    11. April um 20:12 Uhr

1452110cookie-checkWie kann ich Vite-Umgebungsvariablen in vite.config.js verwenden?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy