Búsqueda de sitios web

javascript - protobuf.js Error en tiempo de ejecución $protobuf no está definido


Estoy usando protobuf.js en un proyecto de ionic2. Tengo un archivo .proto válido que primero convierto en un archivo javascript estático mediante:

pbjs -t static databaseapi.proto > databaseapi.js

Debido a que Ionic2 usa TypeScript, agrego un archivo d.ts haciendo:

pbts databaseapi.js > databaseapi.d.ts

mi aplicación se transpila y se ejecuta, pero termino con un error en tiempo de ejecución:

Error en tiempo de ejecución $protobuf no está definido

Sé que es porque el archivo de protocolo buffer compilado hace referencia a la variable $protobuf, pero no sé exactamente dónde se define esta variable. Tampoco sé cómo incluir el archivo que falta porque necesita ser referenciado por el archivo js en lugar del archivo ts.

Respuesta #1

-t static solo crea el código en bruto pero no lo envuelve como un módulo (y por lo tanto no define la dependencia $protobuf).

Para envolverlo también como un módulo, usa -t static-module y elige tu formato deseado a través de -w default|commonjs|amd|es6. default utiliza un envoltorio universal que funciona con AMD, CommonJS y una variable global.

Para todas las opciones de línea de comandos, consulta: https://github.com/dcodeIO/protobuf.js#command-line

Respuesta #2

Gracias dcode, terminé haciéndolo de manera un poco diferente. Para otros que estén leyendo esto, la solución es específica de Ionic, por favor vean la respuesta de dcode para una mejor solución genérica.

Lo que terminé haciendo fue agregar una referencia al archivo js compilado en el index.html de Cordova de la siguiente manera:

<script src="lib/protobuf.js"></script>
<script>$protobuf = protobuf;</script>
<script src="js/databaseapi.js"></script>
<script> $database = $root.com.database.api.v1; </script>

databaseapi.js es el nombre del archivo protobuf compilado.

Artículos relacionados