grpc-code-gen
Code generator for grpc, for typescript and javascript.
CLI usage
grpc-code-gen gen -u git@git.myscrm.cn:2c/panther-statistics-proto.git,git@git.myscrm.cn:2c/panther-third-proto.git -b test -t ${token} -d test/code-gen-cli
Set params by config file
module.exports = {
gitUrls: [
{
url: 'git@git.myscrm.cn:ykcommon/ykproto.git',
branch: 'master',
},
{
url: 'git@git.myscrm.cn:ykcommon/common-proto.git',
branch: 'master',
type:'lib'
},
{
url: 'git@git.myscrm.cn:2c/panther-statistics-proto.git',
deps:['git@git.myscrm.cn:ykcommon/common.git']
},
{
url: 'git@git.myscrm.cn:2c/panther-third-proto.git',
host: 'panther-third',
}
],
branch: 'test',
accessToken: '${token}',
baseDir: `${__dirname}/code-gen`,
resolvePath: (origin, target, rootDir) => {
if (/^git\.myscrm\.cn\/golang\/common\/proto\/(google|common)\//.test(target)) {
return `${rootDir}/git.myscrm.cn/ykcommon/ykproto/${target.replace(/^git\.myscrm\.cn\/golang\/common\/proto\//, '')}`;
} else if (/^proto\/(common|google)\//.test(target)) {
return `${rootDir}/git.myscrm.cn/ykcommon/ykproto/${target.replace(/^proto\//, '')}`;
} else if (/^proto\//.test(target)) {
return target.replace(/^proto\/([^\/]+)(.+)/, (_target, $1, $2) => {
return `${rootDir}/git.myscrm.cn/2c/${$1.replace(/_/g, '-')}${$2}`;
});
} else if (/^(common|google\/api)\//.test(target)) {
return `${rootDir}/git.myscrm.cn/ykcommon/ykproto/${target}`;
}
return null;
},
};
then
grpc-code-gen gen
Params
参数 | 类型 | 说明 | 默认值 |
---|
gitUrls | Array<string | {url: string, branch?: string, accessToken?: host?: string }> | 仓库地址数组 | null |
branch | string | 分支,如参数没有,会去读取环境变量参数branch | null |
accessToken | string | git access token | null |
baseDir? | string | 生成目录 | null |
target? | javascript typescript | 目标语言 | null |
grpcNpmName? | string | grpc npm name, 可取值:grpc , @grpc/grpc-js | grpc |
jsonSemanticTypes? | boolean | 生成json semantic types | false |
loaderOptions? | LoaderOptions | loader生成配置 | { defaults: true } |
callOptions? | callOptions | 方法调用配置 | null |
logOptions? | logOptions | 日志配置 | null |
filterError? | (err: Error) => Error | 错误过滤 | (err) => err |
loadProtoPlugin? | (option: IGitConfigWithUrl) => Promise | proto加载插件 | unll |
callOptions
参数 | 类型 | 说明 | 默认值 |
---|
timeout? | number | 超时时间,单位:ms | undefined |
logOptions
参数 | 类型 | 说明 | 默认值 |
---|
disable? | boolean | 是否启用 | false |
attributes? | string[] | 记录字段,request, response | ['request'] |
Program usage
const base = require('grpc-code-gen/build/base');
base.gen({
gitUrls: [
{
url: 'git@git.myscrm.cn:ykcommon/ykproto.git',
branch: 'master',
},
'git@git.myscrm.cn:2c/panther-statistics-proto.git',
'git@git.myscrm.cn:2c/panther-third-proto.git',
],
branch: 'test',
accessToken: process.env.token,
baseDir: `${__dirname}/code-gen`,
resolvePath: (origin, target, rootDir) => {
if (/^git\.myscrm\.cn\/golang\/common\/proto\/(google|common)\//.test(target)) {
return `${rootDir}/git.myscrm.cn/ykcommon/ykproto/${target.replace(/^git\.myscrm\.cn\/golang\/common\/proto\//, '')}`;
} else if (/^proto\/(common|google)\//.test(target)) {
return `${rootDir}/git.myscrm.cn/ykcommon/ykproto/${target.replace(/^proto\//, '')}`;
} else if (/^proto\//.test(target)) {
return target.replace(/^proto\/([^\/]+)(.+)/, (_target, $1, $2) => {
return `${rootDir}/git.myscrm.cn/2c/${$1.replace(/_/g, '-')}${$2}`;
});
} else if (/^(common|google\/api)\//.test(target)) {
return `${rootDir}/git.myscrm.cn/ykcommon/ykproto/${target}`;
}
return null;
},
})
.catch((err)=>{
console.error(err.stack)
});
版本说明
-
v6.1.13 版本
gitUrls配置新增服务别名配置项
-
v6.1.0 版本
gitUrls配置新增依赖项
-
v6.0.6 版本
新增 access 日志链路
-
v6.0.4 版本
新增 grpc-service.dev.config.js 本地配置,去掉繁琐的本地host配置
-
v6.0.3 版本
解决编译go proto枚举报错问题
-
v6.0.0 版本
解决grpc-code-gen编译时,后端相同package下有相同service的冲突问题
-
v5.4.4 版本
解决javascript精度文档,js在超过16位的number数字会有精度丢失问题,因此统一把('double', 'float', 'int64', 'uint64', 'sint64', 'fixed64', 'sfixed64')类型转换为string类型
-
v5.3.0 版本
bff grpc 新增热重启功能