Tengo un proyecto de nodo en el que intento usar web3 en una página html simple para que los usuarios puedan escribir algo en un contrato inteligente simple. El paso 1 que intento es simplemente tener acceso al objeto web3 en un archivo JavaScript llamado main.html.
Aquí está la estructura de carpetas:
index.js package.json main.html (uses main.js) assets/ js/ main.jsEl siguiente código que uso para comenzar con la red de prueba de ganache en mi computadora:
const Web3 = require('web3'); const web3 = new Web3 ( "http://localhost:7545" ) const ethEnabled = async () => { if (window.ethereum) { await window.ethereum.send('eth_requestAccounts'); window.web3 = new Web3(window.ethereum); console.log("Connected to web3"); return true; } alert("Error - could not connect via web3.js"); return false; } Sin embargo, cuando pego este código en la parte superior de assets/js/main.js obtengo lo siguiente:
Uncaught ReferenceError: require is not defined at main.js:5
Así que ni siquiera puedo usar el paquete require , y mucho menos el paquete web3 , los cuales tengo instalados a través npm install .
Sin embargo, cuando pego el código web3 anterior en index.js , no parece dar un error:
const express = require('express') const app = express() const port = 3000 const Web3 = require('web3'); const web3 = new Web3 ( "http://localhost:7545" ) const ethEnabled = async () => { if (window.ethereum) { await window.ethereum.send('eth_requestAccounts'); window.web3 = new Web3(window.ethereum); console.log("Connected to web3"); return true; } alert("Error - could not connect via web3.js"); return false; } app.use(express.static("./assets")); app.get('/', (req, res) => { //res.send('Hello World!') res.sendFile('./main.html', { root: __dirname }); }) app.listen(port, () => { console.log(`Example app listening at http://localhost:${port}`) }) Quiero usar la funcionalidad web3 en main.html con main.js , ya que el usuario estaría completando un formulario, presionando un botón, luego usaría la funcionalidad web3 para escribir algo en mi contrato simple.
Pero creo que no entiendo el diseño y la estructura del proyecto node.js Dado el caso de uso anterior, ¿cómo debo proceder? Cuando coloco el código de inicio de web3 en index.js , no sé cómo acceder al objeto web3 en main.js ¿Cómo debería hacer esto?
Debe usar un archivo js puro en su .html. Agregue el script en su encabezado y solo instancia la clase Web3: new Web3 ( "http://localhost:7545" ) ,
<script src="https://github.com/ChainSafe/web3.js/blob/v1.2.11/dist/web3.min.js></script>