Bündeln von web3js scheint nicht zu funktionieren (Metamask-App)

(Dies ist eine Folgefrage von hier .)

In den häufig gestellten Fragen der Metamask-Entwickler heißt es, "die Version von web3 zu bündeln, die während der Entwicklung verwendet wird".

Also habe ich eine web3.min.js-Version 0.20.6 von GitHub heruntergeladen und wie im folgenden Code "gebündelt". Dann logge ich "web3.version.api" in die Konsole ein.

Jetzt meldet die Konsole mit oder ohne Bündelung nach dem Klicken auf die Schaltfläche eine Version 0.20.3 .

Ich vermute das liegt an der Leitung

web3 = new Web3(web3.currentProvider);

was web3 auf den eingefügten Code von meinem Metamask-Plugin setzt, in dem ich angemeldet bin, und es führt diesen Code aus, nicht meine "gebündelte" Version ...

Frage: Wie bündele ich meine eigene Version von 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>

PS. Ich habe die Schaltfläche erstellt, um sicherzustellen, dass der web3-Aufruf an „web.version.api“ gemäß dem Vorschlag von @Kai Kälberer „außerhalb des Hinzufügens des eventListener zum Fenster“ erfolgt

Update: Wie von @viz vorgeschlagen, habe ich die nicht minimierte web3j-Version von GitHub heruntergeladen und die Zeile, die das Überschreiben der globalen web3-Instanz vermeidet, auskommentiert. Überprüfen Sie diesen Screenshot von meinem Dev-Tools-Debugger:

Screenshot aus dem Debugger der Dev-Tools, der zeigt, dass der gebündelte web3js-Code die Zeilen, die das globale web3-Objekt überschreiben, auskommentiert hat.

Ich sehe immer noch, dass die Konsole die Version 0.20.3 und nicht 0.20.6 ausgibt , wie in der heruntergeladenen web3.js definiert ... warum?

Ich teste mit deinem Code. Nach einigen Experimenten scheint es, als würde die neueste web3.min.js-Quelle das globale Web3Objekt nicht korrekt überschreiben.

Antworten (1)

Dies geschieht aufgrund dieser Zeile . Derzeit überschreibt der Code das Web3Objekt nicht, wenn das Global Web3bereits vorhanden ist. Aus diesem Grund erhalten Sie dieselbe Version der Web3-API, die MetaMask bereits injiziert hat, egal wie Sie es versuchen.

Dies kann gelöst werden, indem Sie ein Paketierungstool wie webpack verwenden und das Web3-Objekt als Modul laden oder die Datei web3.js manuell herunterladen und diese Zeile korrigieren, wenn Sie sie als Skript-Tag einbetten möchten.

Ich denke jedoch, dass web3.js überschreiben sollte , selbst wenn das globale Objekt vorhanden ist. Wenn Sie der Meinung sind, dass das aktuelle Verhalten unangemessen ist, können Sie ein Problem über das web3.js-Github-Repository melden.

Vielen Dank für Ihre Antwort! Ich habe wie von Ihnen vorgeschlagen die Datei web3.js manuell heruntergeladen, diese Zeile auskommentiert und gebündelt. Kein Erfolg, siehe meine aktualisierte Frage.
@YtsendeBoer Sie sollten nicht die gesamten drei Zeilen auskommentieren. Bitte lesen Sie den Code, Sie sollten nur && typeof window.Web3 === 'undefined'diesen Teil entfernen.
Schön, dass es geholfen hat :)