Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

162
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!