Estoy tratando de inyectar/reemplazar variables de entorno con @rollup/plugin-replace . Desafortunadamente, recibo este error:
TypeError: no se puede convertir indefinido en objeto
// rollup.config.js import replace from "@rollup/plugin-replace"; import { config } from "dotenv"; config(); export default { // ... plugins: [ replace({ values: { YOUTUBE_API: JSON.stringify(process.env.YOUTUBE_API) }, preventAssignment: true, }), // ... }Y lo llamo así:
onMount(() => { (async function getPopular() { videos = await axios.get("https://www.googleapis.com/youtube/v3/videos", { part: "id, snippet, suggestions", chart: "mostPopular", key: YOUTUBE_API, }); })(); }); Cerré la sesión de la variable y así puedo confirmar que existe. Además, si elimino la función stringify , aparece otro error:
ReferenceError: blablabblub no está definido
He hecho esto con éxito en otros proyectos. ¿Qué diablos está mal aquí?
Entonces, después de investigar un poco con el mismo problema, descubrí que estaba relacionado con la asignación de objetos. Por ejemplo:
export default { // ... plugins: [ replace({ values: { env: { API_URL: process.env.API_URL, API_VERSION: process.env.API_VERSION, } }, preventAssignment: true, }), // ... } // in some JS or Svelte file const config = { host: env.API_URL, version: env.API_VERSION } // The above will result in a reference error of 'env' not being defined. // in the same JS or Svelte file.. const envVars = env; const config = { host: envVars.API_URL, version: envVars.API_VERSION } // this works just fine!No he tenido más tiempo para investigar, pero mi intuición es que el resumen no reemplazará los nombres de las variables cuando estén anidados dentro de una asignación de objeto. Podría ser bueno que una bandera opcional permitiera esto, pero también podría volverse muy complicado, por lo que no lo hicieron.
Espero que esto ayude si todavía es un problema para usted.