javascript - 如何在客户端排除导入

标签 javascript go protocol-buffers grpc

我正在使用 protoc-gen-validate ,这是一个代码生成器插件,用于在服务器端验证 protobuf。服务器是用 Go 编写的,但客户端是用 Javascript 编写的。我遇到的问题是 protoc-gen-validate使用 ts-protoc-gen 时,库似乎包含在构建的输出中,这是 protoc-gen-validate 不受支持的语言.结果,MODULE_NOT_FOUND使用生成的 javascript 代码时发生错误,此处失败:
validation error

internal/modules/cjs/loader.js:1033
  throw err;
  ^

Error: Cannot find module '../../validate/validate_pb.js'
Require stack:
- /home/amadeus/HarmonyProject/harmony-grpc-test/gen/core/v1/core_pb.js
- /home/amadeus/HarmonyProject/harmony-grpc-test/index.js
我想知道,如何自动从生成的代码中排除此导入?此外,如果解决方案保持 proto 文件不可变,那就太好了,因为它们位于 git 子模块中。

最佳答案

解决这个问题的凌乱黑客,寻找更优雅的方法来完成这项工作:

IN_DIR="./protocol"
PROTOCOL_BUILD_TMP="./protocol-build-tmp"

mkdir -p $PROTOCOL_BUILD_TMP
cp -r $IN_DIR $PROTOCOL_BUILD_TMP

for dir in $(find "${PROTOCOL_BUILD_TMP}" -name '*.proto' -print0 | xargs -0 -n1 dirname | sort | uniq); do
  sed -i -E "s/ \[ \(validate.rules(.*)\];/;/g" $(find "${dir}" -name '*.proto')
  sed -i -E "/validate.proto/d" $(find "${dir}" -name '*.proto')
done
rm -r $PROTOCOL_BUILD_TMP

关于javascript - 如何在客户端排除导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62983718/

相关文章:

go - 将 slice 转换为元组的便捷函数?

xml - 获取原始元素表示,包括开始和结束标签

visual-studio-code - VS Code PyLint 错误 E0602( undefined variable )与 ProtoBuf 编译的 Python 结构

c++ - Google Protobuf 基于 C++ 的 Python 实现的性能

javascript - 未捕获的类型错误 : Cannot read property 'style' of null?

javascript - 当“没有可用的互联网”时,如何显示自定义页面加载错误?

javascript - 如何删除对象的键和值之间的空格

go - 将配对与嵌套 map 结合

c# - protobuf-net 中非必填字段的序列化

javascript - Mozilla Addon Development - 在不同域的窗口之间进行通信