es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo evitar la advertencia “`this` ha sido reescrito como `undefined`” al empaquetar un archivo Scala.js con Rollup?

Estoy usando un archivo Scala.js con módulos ECMAScript dentro de un proyecto Svelte. Al construir el proyecto con rollup, recibo la advertencia de que “this” se ha reescrito como “undefined“.

La advertencia apunta a la última línea de código aquí:

var $linkingInfo = Object.freeze({
  "esVersion": 6,
  "assumingES6": true,
  "productionMode": true,
  "linkerVersion": "1.7.1",
  "fileLevelThis": this
});

y vincula a esta sección de la documentación.

Error: “this is undefined”
En un módulo de JavaScript, “this” es undefined en el nivel superior (es decir, fuera de las funciones). Debido a eso, Rollup reescribirá todas las referencias a “this” como undefined para que el comportamiento resultante coincida con lo que sucederá cuando los módulos sean nativamente soportados.
Hay ocasiones en las que puede haber razones válidas para que “this” signifique algo más. Si estás obteniendo errores en tu paquete, puedes usar options.context y options.moduleContext para cambiar este comportamiento.

En la sección de contexto encuentro lo siguiente:

De forma predeterminada, el contexto de un módulo, es decir, el valor de “this” en el nivel superior, es undefined. En casos raros, es posible que necesites cambiarlo a algo diferente, como ‘window’.

¿Cambiar el contexto de “this” a “window” es lo correcto en este caso?
¿Y cómo añado esta opción a rollup?
La documentación proporciona esta información: CLI: --context . Al añadir la opción de esta manera, el error persiste:

[package.json]
"scripts": {
  "build": "rollup -c --context window",
  "dev": "rollup -c -w --context window"
...
}

Cuando añado esta línea al archivo rollup.config:

export default {
    input: ...,
    output: {...},
    plugins: [...],
    watch: {...},
    context: "window"
};

la advertencia desaparece. ¿Es esto lo correcto a hacer?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    La advertencia “esto ha sido reescrito como indefinido” en un archivo de Scala.js con módulos ECMAScript dentro de un proyecto Svelte al compilar con Rollup significa que Rollup ha reescrito cualquier referencia a ‘this’ como ‘indefinido’ porque en un módulo de JavaScript, ‘this’ es ‘undefined’ en el nivel superior. La documentación sugiere que en casos raros, es posible que necesites cambiar el contexto de un módulo a algo diferente, como ‘window’.

    Para cambiar el contexto de ‘this’ a ‘window’ en este caso, puedes agregar la opción ‘context’ al archivo de configuración de Rollup de la siguiente manera:

    export default {
      input: ...,
      output: {...},
      plugins: [...],
      watch: {...},
      context: "window"
    };
    

    Esto debería eliminar la advertencia. Alternativamente, puedes agregar la opción ‘–context window’ al comando de la CLI de Rollup de la siguiente manera:

    "scripts": {
      "build": "rollup -c --context window",
      "dev": "rollup -c -w --context window",
      ...
    }
    

    Sin embargo, según la información proporcionada, no está claro si cambiar el contexto de ‘this’ a ‘window’ es lo correcto en este caso, ya que depende del contexto y los requisitos específicos del proyecto.

Comments are closed.