You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何批量生成所有Proto文件?脚本配置问题求助

批量生成所有Proto文件的解决方案

1. 调整package.json的脚本命令

先修改scripts里的proto-gen命令,将参数改为指向包含所有proto文件的目录,或者用匹配模式覆盖所有.proto文件(Unix-like环境适用,Windows环境建议用目录遍历方案):

"scripts": {
  "dev": "next dev -p 3003",
  "proto-gen": "node ./proto-gen.js --proto-dir=./proto --proto-dir=./generated"
}

如果你的脚本支持glob匹配,也可以直接传全局匹配模式:

"scripts": {
  "dev": "next dev -p 3003",
  "proto-gen": "node ./proto-gen.js --proto-files='./**/*.proto'"
}

2. 修改proto-gen.js脚本以支持批量处理

原来的脚本仅处理单个文件,需要调整为遍历目录或处理多个文件:

方案一:遍历指定目录下的所有.proto文件

如果用--proto-dir参数,脚本里可以递归遍历目录收集所有proto文件:

const fs = require('fs');
const path = require('path');
const args = require('minimist')(process.argv.slice(2));

// 递归收集目录下的所有.proto文件
function collectProtoFiles(dir, files = []) {
  const items = fs.readdirSync(dir);
  for (const item of items) {
    const fullPath = path.join(dir, item);
    const stat = fs.statSync(fullPath);
    if (stat.isDirectory()) {
      collectProtoFiles(fullPath, files);
    } else if (item.endsWith('.proto')) {
      files.push(fullPath);
    }
  }
  return files;
}

// 解析传入的目录参数
const protoDirs = args['proto-dir'] || [];
const dirList = Array.isArray(protoDirs) ? protoDirs : [protoDirs];

// 收集所有目标proto文件
const allProtoFiles = [];
for (const dir of dirList) {
  allProtoFiles.push(...collectProtoFiles(dir));
}

// 批量处理每个proto文件
for (const file of allProtoFiles) {
  console.log(`正在处理文件:${file}`);
  // 替换为你原本处理单个proto文件的逻辑,比如protobuf代码生成操作
  // 示例:const root = protobuf.loadSync(file); root.generate(...);
}

方案二:用glob匹配处理所有proto文件

如果用--proto-files参数,需要先安装glob依赖(npm install glob --save-dev),然后在脚本中解析匹配模式:

const glob = require('glob');
const args = require('minimist')(process.argv.slice(2));

// 获取匹配模式,默认匹配所有目录下的.proto文件
const protoPattern = args['proto-files'] || './**/*.proto';

// 匹配并处理所有文件
glob(protoPattern, (err, files) => {
  if (err) {
    console.error('匹配proto文件出错:', err);
    process.exit(1);
  }

  for (const file of files) {
    console.log(`正在处理文件:${file}`);
    // 替换为你的生成逻辑
  }
});

3. 注意事项

  • Windows环境下原生shell不支持**这类glob模式,优先选择方案一的目录遍历方式,避免环境兼容问题。
  • 如果proto文件之间存在互相引用,确保生成逻辑能正确处理依赖关系,比如设置正确的proto路径。

内容的提问来源于stack exchange,提问作者sara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 08:56:10