Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

164
Vistas
No se puede acceder al objeto definido por el reemplazo del complemento acumulativo

En un componente Svelte, estoy tratando de acceder a un objeto que configuré en mi archivo de configuración acumulativo. Mi archivo rollup.config.js se ve así:

 import replace from '@rollup/plugin-replace'; ... export default { ... replace({ foo: JSON.stringify({ bar: 'Hello' }), }), ...

En mi componente Svelte, funciona un simple console.log(foo) :

Foo

Pero cuando trato de entrar en ese objeto foo como console.log(foo.bar) , obtengo que foo no está definido :

fooUndefined

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

¡Buena pregunta! El objeto foo permanece sin definir, por lo que arroja el error correcto y no puede encontrar foo para reemplazarlo con lo que sea que vaya a reemplazarlo.

La solución es hacer que el complemento de reemplazo haga su trabajo. Puede acceder a su variable de esta manera en su js o sus archivos .svelte

 const { bar } = foo; console.log(bar);

Nota: se realizó un cambio en este complemento, verifique aquí para obtener más detalles. si planea usar variables de entorno usando dotenv considere

 import { config } from "dotenv"; ... replace({ values: { foo: JSON.stringify({ bar: "Hello", ...config().parsed }), }, }), ...

y en tu expediente esbelto

 const { bar, ...rest } = foo; console.log("bar=>", bar); console.log("env=>", rest);
over 4 years ago · Santiago Trujillo Denunciar

0

Esta sección del documento explica su problema exacto.
https://github.com/rollup/plugins/tree/master/packages/replace#delimiters

La opción de delimiters controla cómo se emparejarán las cadenas. Con los delimiters predeterminados ['\b', '\b(?!\.)'] , solo reemplazaría a foo si sigue un límite de palabra y es seguido por un límite de palabra que no es un punto. Por lo tanto, con su rollup.config.js el comportamiento sería

 console.log(foo) // becomes console.log({"bar":"Hello"}) console.log(foo.bar) // is not replaced by the plugin as `foo` IS followed by a dot console.log(foo['bar']) console.log(foo .bar) // space after `foo` // both satisfy the delimiter check again and print: Hello // (horrible coding style in the latter but to illustrate how it works) const { bar } = foo // also satisfy the delimiter check hence console.log(bar) // prints: Hello

Como puede ver, el complemento de reemplazo realmente no analiza su código, sino que solo realiza un reemplazo de texto simple, no muy diferente de la función de búsqueda y reemplazo de su IDE/editor. Gauss, ¿qué diría abajo?

 console.log('foo') // Guess what? // ... // ... // printed: {"bar":"Hello"} // as if it were console.log('{"bar":"Hello"}')

Para concluir, su solución podría ser

  • foo['bar'] ,
  • const { bar } = foo ,
  • evite el reemplazo de objetos y use claves como __FOO_BAR__ , __FOO_BAZ__ , ...
  • pase delimiters: ['\\b', '\\b'] para permitir que los puntos sigan a la clave.

(Sin embargo, al momento de escribir, el último no parece funcionar todavía debido a una corrección de errores que espera ser fusionada).
https://github.com/rollup/plugins/pull/1088

Si usa delimiters: ['', ''] la advertencia anterior requiere un nivel de precaución mucho mayor. Incluso una cadena literal 'food' o una etiqueta de plantilla HTML <footer> podría cambiarse a un galimatías como '{"bar":"Hello"}d' o <{"bar":"Hello"}ter> . Así que nombre sus claves sabiamente o use algunos delimitadores inusuales dependiendo de su uso, como lo demostró una vez la versión anterior del complemento: delimiters: ['<@', '@>'] .
https://github.com/rollup/rollup-plugin-reemplazo

Sin embargo, dado que este tipo de preprocesamiento es bastante rudimentario, siempre es necesario tener cuidado al agregar claves reemplazadas y al usarlas.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda