Estoy experimentando con la implementación del contrato ethers.js dentro de una función de nube de firebase. Mis funciones compilan y compilan, pero cuando ejecuto firebase serve --only functions o firebase deploy --only functions , implementa uno de los contratos exportados en index.ts, ("helloWorld") pero no el otro ("greet "), que es lo que estoy tratando de probar.
No se generan errores en el paso de compilación, y cuando ejecuto Firebase Serve, obtengo una URL para helloWorld , pero nada (ni ningún mensaje de error) en 'saludar'.
Aquí está el contenido de index.ts:
import {ethers, Wallet} from "ethers"; import * as functions from "firebase-functions"; import greetJson from "../contracts/greeter.json"; export const greet = functions.https.onRequest(async (request, response) => { const provider = new ethers.providers.JsonRpcProvider("http://localhost:8545"); const signer = new Wallet("*redacted*", provider); console.log("starting deploy"); const abi = greetJson.abi; const factory = new ethers.ContractFactory(abi, greetJson.bytecode, signer); const contract = await factory.deploy(["Ciao Bella"]); const greeter = await contract.deployed(); const greetresult = await greeter.greet(); response.send("Hello: " + greetresult); }); export const helloWorld = functions.https.onRequest((request, response) => { functions.logger.info("Hello logs!", {structuredData: true}); response.send("Hello from Firebase!"); });aquí está la salida de la terminal:
My-MacBook-Pro:funciones jk$ npm compilación de script de ejecución
construir tsc
My-MacBook-Pro:functions jk$ firebase serve --only functions ⚠ Your requested "node" version "16" doesn't match your global version "14". Using node@14 from host. i functions: Watching "/Users/jk/Documents/VSCodeProjects/BKC/bkc-cloud-blockchain/functions" for Cloud Functions... ✔ functions[us-central1-helloWorld]: http function initialized (http://localhost:5000/bkc-63bcf/us-central1/helloWorld). Eso es todo. ¿Alguna idea de por qué se ignora la función de greet ?
Hay una opción llamada Implementaciones parciales , para implementar funciones específicas de Firebase.
Por ejemplo:
$ firebase deploy --only functions:function1
Y para implementar más de una función a la vez, puede usar:
$ firebase deploy --only functions:function1,functions:function2
Entonces, para su caso, puede ejecutar el comando para implementar sus dos funciones:
$ firebase deploy --only functions:greet,functions:helloWorld
Esto resultó ser un problema relacionado con la estructura del directorio y la clave de include en tsconfig.json.
Si coloca una clave de inclusión como "include": ["src", "contracts"] para poder importar archivos json en la carpeta de contratos, termina escribiendo en una carpeta lib que es un lugar inesperado y es ignorado Lo mejor es asegurarse de que si necesita una carpeta para contener archivos que deben incluirse en su compilación, simplemente colóquelos en src y no include una clave de inclusión en su tsconfig cuando ejecute firebase serve