protobuf.js 运行时错误 $protobuf 未定义
protobuf.js Runtime Error $protobuf is not defined
我在 ionic2 项目中使用 protobuf.js。我有一个有效的 .proto 文件,我首先通过以下方式将其转换为静态 javascript 文件:
pbjs -t static databaseapi.proto > databaseapi.js
因为 ionic2 使用打字稿,我添加了一个 d.ts 文件:
pbts databaseapi.js > databaseapi.d.ts
我的应用程序可以转译并运行,但我最终遇到运行时错误:
运行时错误 $protobuf 未定义
我知道是因为编译出来的protocol buffer文件引用了变量$protobuf,但是不太清楚这个变量是在哪里定义的。我也不知道如何包含丢失的文件,因为它需要被js文件而不是ts文件引用。
-t static
只创建原始代码但不将其包装为模块(因此不定义 $protobuf
依赖项)。
要同时将其包装为一个模块,请使用 -t static-module
并通过 -w default|commonjs|amd|es6
选择您想要的格式。 default
使用与 AMD、CommonJS 和全局变量一起工作的通用包装器。
有关所有命令行选项,请参阅:https://github.com/dcodeIO/protobuf.js#command-line
感谢 dcode,我最终做了一些不同的事情。对于阅读本文的其他人,该解决方案是特定于 Ionic 的,请参阅 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文件名
我在 ionic2 项目中使用 protobuf.js。我有一个有效的 .proto 文件,我首先通过以下方式将其转换为静态 javascript 文件:
pbjs -t static databaseapi.proto > databaseapi.js
因为 ionic2 使用打字稿,我添加了一个 d.ts 文件:
pbts databaseapi.js > databaseapi.d.ts
我的应用程序可以转译并运行,但我最终遇到运行时错误:
运行时错误 $protobuf 未定义
我知道是因为编译出来的protocol buffer文件引用了变量$protobuf,但是不太清楚这个变量是在哪里定义的。我也不知道如何包含丢失的文件,因为它需要被js文件而不是ts文件引用。
-t static
只创建原始代码但不将其包装为模块(因此不定义 $protobuf
依赖项)。
要同时将其包装为一个模块,请使用 -t static-module
并通过 -w default|commonjs|amd|es6
选择您想要的格式。 default
使用与 AMD、CommonJS 和全局变量一起工作的通用包装器。
有关所有命令行选项,请参阅:https://github.com/dcodeIO/protobuf.js#command-line
感谢 dcode,我最终做了一些不同的事情。对于阅读本文的其他人,该解决方案是特定于 Ionic 的,请参阅 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文件名