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