Lado del servidor de objetos vacíos Web3 en Meteor

Creó un nuevo --bareproyecto Meteor (versión 1.8).

Se usa meteor npm install --save web3para agregar web3 al proyecto desde npmjs.org.

En server.jsuso de código:

Web3 = require('web3')
console.log(Web3) // returns '{}'

Nada más añadido al proyecto Meteor. El uso del lado del cliente es el esperado.

Kit de herramientas: MacOS, Ganache, Truffle, Web3 versión 1

Por supuesto, descubrí que esto puede ser una consecuencia de la recursividad en las dependencias de paquetes.

¿Es este un problema conocido? ¿Es un error? ¿Cuál sería la mejor dirección a seguir para determinar la causa raíz de este problema?

Preguntas/hilos de SO relacionados:

Error de observación del evento del contrato del lado del servidor Meteor

Problema con la llamada del lado del servidor Meteor al nodo Ethereum

No se puede encontrar el meteoro del módulo 'web3'

¿Cómo se conecta a un nodo desde el lado del servidor de una aplicación de meteoritos?

Actualizar:

Después de ver muchas preguntas/problemas sin resolver sobre esto, me encontré con un problema de github existente para el seguimiento. Además, hay una publicación en los foros de Meteor , y he creado una publicación en los foros de Ethereum

También intenté usar solo el archivo de biblioteca distribuida web3.jsde github dist con resultados similares.
Obviamente, es mejor usar NPM para esto, pero ¿ni siquiera funciona cuando incluyes el distarchivo y lo referencias directamente? como, require('./web3.dist.js');? El ./asegura que hace una búsqueda directa de archivos antes de node_modules.
@ohsully sí, la referencia directa al archivo dist es cómo lo probé. Funciona solo en un proyecto de nodo y, por experiencia previa, he visto cuándo la recursividad de la dependencia del paquete resultó en este efecto para un proyecto diferente y un paquete npm con el que estaba trabajando. Por lo tanto, supongo que hay algún conflicto con Meteor en el lado del servidor. Es interesante notar también que es un nuevo --bareproyecto en la última versión de Meteor.
Actualización: he instalado tanto desde npm como desde el archivo dist en paralelo, y puedo intentar importar/requerir cualquiera de los dos en el servidor. Todavía es un nuevo proyecto de meteorito vacío, solo descargué el archivo dist y ejecuté meteor npm install --save web3. Persiste el mismo problema.
Actualización sobre el progreso de la solución: he podido hacer que web3 funcione tanto en el servidor como en el cliente en Meteor (1.7/1.8). Esto se logró eliminando meteor-node-stubsprimero el paquete npm. Esto tenía un conflicto de dependencia con web3 (el paquete candidato es crypto-browserify). Después de volver a agregar el meteor-node-stubspaquete después de instalar web3 en el proyecto, el conflicto parece haberse resuelto. Parece que el orden de carga de las dependencias puede haber sido el problema. Se necesitan más pruebas para determinar exactamente la solución específica. ¿Quizás otros puedan probar esta solución alternativa?
Ya no estoy haciendo desarrollo activo de Meteor, pero si lo tienes funcionando, ¡entonces parece que deberías escribir eso y aceptar tu propia respuesta! Accesorios.

Respuestas (1)

En pruebas posteriores, parece haber un trabajo consistente para lograr que el requirepaquete Web3 funcione en el servidor en Meteor.

Procedimiento probado en proyectos Meteor nuevos y existentes (versión 1.7/1.8):

  1. Cree un nuevo proyecto de meteoritos (opcional) o navegue al directorio de un proyecto existente.
  2. En el directorio del proyecto Meteor use meteor npm uninstall --save meteor-node-stubs.
  3. Siguiente haz:meteor npm install --save web3
  4. Ahora vuelve a agregarmeteor npm install --save meteor-node-stubs
  5. Realice la importación normal e instancia el objeto web 3 según la documentación

La instancia web3 ahora debería funcionar como se esperaba en el servidor Meteor, que puede verificar después de iniciar la aplicación usando meteor shell.

Parece que hay un problema en el orden de carga de los paquetes de dependencia en conflicto, siendo el paquete ofensivo candidato crypto-browserify.