Empaquetar web3js no parece funcionar (aplicación Metamask)

(Esta es una pregunta de seguimiento de aquí ).

En las preguntas frecuentes de los desarrolladores de Metamask se indica "agrupar la versión de web3 que se usa durante el desarrollo".

Así que descargué un web3.min.js versión 0.20.6 de GitHub y lo "empaquetado" como en el código a continuación. Luego registro "web3.version.api" en la consola.

Ahora, con o sin el paquete, la consola informa una versión 0.20.3 después de hacer clic en el botón.

Sospecho que esto se debe a la línea.

web3 = new Web3(web3.currentProvider);

que establece web3 en el código inyectado de mi complemento Metamask, en el que estoy conectado, y ejecuta ese código, no mi versión "empaquetada"...

Pregunta: ¿Cómo agrego mi propia versión de web3?

<html>
  <body>

    <script type="text/javascript" src="scripts/web3.min.js"></script>

    <script type="text/javascript">

      window.addEventListener("load", function() {

        if (typeof web3 === "undefined") {
            console.log("No web3 provider found");
        } else {
            web3 = new Web3(web3.currentProvider);
            console.log("Using web wallet");
        }

      })  </script>

    <button id="buttonBalance">Click to report version to console</button>

    <script type="text/javascript">
      button = document.getElementById("buttonBalance")
      button.onclick = function tmp()
  {
    console.log("Version=" + web3.version.api);
      };
    </script>


  </body>
</html>

PD. Creé el botón para asegurarme de que la llamada web3 a "web.version.api" se realice "fuera de agregar eventListener a la ventana" según la sugerencia de @Kai Kälberer

Actualización: según lo sugerido por @viz, descargué la versión web3j no minimizada de GitHub y eliminé la línea que evita anular la instancia web3 global. Mira esta captura de pantalla de mi depurador de herramientas de desarrollo:

captura de pantalla del depurador de herramientas de desarrollo que muestra que el código web3js incluido ha descomentado las líneas que anulan el objeto web3 global.

Todavía veo que la consola imprime la versión 0.20.3 y no 0.20.6 como se define en el web3.js descargado ... ¿por qué?

Estoy probando con tu código. Después de algunos experimentos, parece que la fuente web3.min.js más reciente no anula correctamente Web3el objeto global.

Respuestas (1)

Esto está sucediendo debido a esta línea . Actualmente, el código no anula el Web3objeto si el global Web3ya existe. Es por eso que está obteniendo la misma versión de Web3 API que MetaMask ya inyectó sin importar cómo lo intente.

Esto se puede resolver utilizando una herramienta de empaquetado como webpack y cargando el objeto Web3 como un módulo, o descargando manualmente el archivo web3.js y corrigiendo esa línea si desea incrustarlo como una etiqueta de secuencia de comandos.

Sin embargo , creo que web3.js debería anularse incluso si el objeto global existe. Si cree que el comportamiento actual es inapropiado, puede presentar un problema en el repositorio web3.js github.

¡Gracias por su respuesta! Hice lo que sugirió para descargar manualmente el archivo web3.js, comentar esa línea y empaquetarla. Sin éxito, por favor vea mi pregunta actualizada.
@YtsendeBoer, no debe comentar las tres líneas completas. Lea el código, solo debe eliminar && typeof window.Web3 === 'undefined'esta parte.
Me alegro de que haya ayudado :)