protobuf.js运行时错误$ protobuf未定义

时间:2017-03-06 09:33:28

标签: javascript typescript ionic-framework protocol-buffers

我在ionic2项目中使用protobuf.js。我有一个有效的.proto文件,我首先将其转换为静态javascript文件:

pbjs -t static databaseapi.proto > databaseapi.js

Becasue ionic2使用typescript,我通过执行以下操作添加d.ts文件:

pbts databaseapi.js > databaseapi.d.ts

我的应用程序转换并运行,但最终出现运行时错误:

运行时错误$ protobuf未定义

我知道这是因为编译的协议缓冲区文件引用了变量$ protobuf,但我不太清楚这个变量的定义。我也不知道如何包含丢失的文件,因为它需要由js文件而不是ts文件引用。

2 个答案:

答案 0 :(得分:1)

-t static只是创建原始代码,但不将其包装为模块(因此不会定义$protobuf依赖项)。

要将其作为模块包装,请使用-t static-module并通过-w default|commonjs|amd|es6选择所需的格式。 default使用与AMD,CommonJS和全局变量一起使用的通用包装器。

有关所有命令行选项,请参阅:https://github.com/dcodeIO/protobuf.js#command-line

答案 1 :(得分:0)

感谢dcode,我最后做的有点不同了。对于阅读此内容的其他人来说,该解决方案具有离子特定性,请通过dcode查看答案以获得更好的通用解决方案。

我最终做的是将已编译的js文件的引用添加到Cordova的index.html中,如下所示:

<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是已编译的protobuf文件的名称。