как заменить строки с .env (dotenv-flow) на svelte-kit?

#sveltekit

Вопрос:

Внутри svelte.config.js у меня есть это:

     preprocess: autoPreprocess({
        replace: [
            ['API_ENDPOINT', JSON.stringify(process.env.API_ENDPOINT)]
        ]
    }),
 

Он должен заменить строку «API_ENDPOINT», но это не так.

Вот как я его использую:

 async function api(url: string, body = {}, opts = {}) {
    const endpoint = 'API_ENDPOINT';
    console.log(endpoint);
    const res = await fetch(endpoint   url, {
        method: 'POST',
        headers: {
            'Content-type': 'application/json',
        },
        body: JSON.stringify(body)
    });

    if (!res.ok) {
        const err = await res.json();
        throw (err || res.statusText);
    }

    return opts.raw ? await res.text() : await res.json();
}

export default api;
 

Все, что я получаю, это http://localhost:3000/API_ENDPOINT/subscriptions

Ответ №1:

в вашем svelte.config.js файле вместо

 autoPreprocess({
  replace: [['process.env.NODE_ENV', JSON.stringify(process.env.NODE_ENV)]],
});
 

использовать

 import sveltePreprocess from 'svelte-preprocess'
sveltePreprocess({
  replace: [['process.env.NODE_ENV', JSON.stringify(process.env.NODE_ENV)]],
});
 

Мне кажется, что autoPreprocess это устарело, но README документы были обновлены неправильно.

Вы также можете подумать о выполнении одного из следующих действий:

используйте process.env.API_ENDPOINT напрямую
 const endpoint = process.env.API_ENDPOINT;
 
создайте отдельную функцию javascript для обработки переменных среды

что-то вроде этого

envVars.js

 import dotenv from 'dotenv-flow';
import path from 'path';

dotenv.config({
  path: path.resolve(__dirname, `path-to-your-(.env)-file`),
});

export const getEnvVar = (key) => process.env[key];
 

и используйте его вот так:

 import { getEnvVar } from 'path-to-envVars'
const endpoint = getEnvVar('API_ENDPOINT');
 
если вы уже используете Vite в качестве инструмента сборки

Добавьте переменные в .env файл следующим образом:

 VITE_YOUR_ENV_VAR_GOES_HERE=bar
 

в вашем случае:

 VITE_API_ENDPOINT=your_value
 

затем импортируйте их в отдельный файл javascript или машинописного текста

envVars.js

 export const envVars = {
  API_ENDPOINT: import.meta.env.VITE_API_ENDPOINT
};
 

а затем импортируйте envVars и используйте его как есть:

 import { envVars } from 'path-to-envVars.js'
 

и теперь вы можете читать переменную среды следующим образом:

envVars.myVariable или, в вашем случае const endpoint = envVars.API_ENDPOINT

Комментарии:

1. Я получаю эту ошибку: 500 process is not defined config@http://localhost:3000/node_modules/.vite/dotenv-flow.js?v=d34d57c4:178:9 @http://localhost:3000/src/env.ts:2:10

2. export const getEnvVar = (key) => process.env[key]; он не может найти process