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

如何阻止openapi-generator-cli生成带完整命名空间的模型文件

openapi-generator-cli 生成模型去除命名空间解决方案

你可以通过以下两种常用方案实现需求,根据你的场景选择即可:

方案1:通过生成器附加参数配置(无需额外脚本)

运行生成命令时通过additional-properties传入modelNameMapping规则,批量把带命名空间的模型名映射为纯类名,同时自动生成对应文件名:

  • 如果你的所有模型命名空间前缀固定,直接按如下格式写映射规则,把前缀替换为空即可,示例命令如下:
openapi-generator-cli generate \
  -i 你的openapi规范文件地址(本地路径或url) \
  -g 你用的typescript生成器(比如typescript-axios/typescript-fetch等) \
  -o 输出目录 \
  --additional-properties=modelNameMapping=MyNamespaceCommonV1ModelsDto*=*

上述配置会自动把所有MyNamespaceCommonV1ModelsDto开头的模型名截断,仅保留后面的类名部分,生成的文件名和代码里的接口名都会同步变成你期望的格式。

如果你的模型命名空间不固定,5.0以上版本的openapi-generator支持正则匹配规则,配置如下:

--additional-properties=modelNameMapping=/^.*([A-Z][a-zA-Z0-9]+)$/$1/

该正则会自动提取模型名末尾的纯类名部分,忽略前面所有命名空间前缀。

方案2:后处理脚本兜底(兼容性最强)

如果上述配置不生效,可在生成完成后运行一个简单的node脚本批量处理文件和内容,示例脚本如下:

const fs = require('fs');
const path = require('path');
// 替换为你的生成文件输出目录
const modelDir = './src/models';

fs.readdirSync(modelDir).forEach(file => {
  if (!file.endsWith('.ts')) return;
  // 提取纯类名的kebab-case格式
  const pureNameKebab = file.split('-').slice(-1)[0].replace('.ts', '');
  const newFileName = `${pureNameKebab}.ts`;
  const filePath = path.join(modelDir, file);
  const content = fs.readFileSync(filePath, 'utf8');
  // 替换内容里的接口名
  const pureClassName = pureNameKebab.replace(/-([a-z])/g, (_, c) => c.toUpperCase());
  const newContent = content.replace(/export interface (\w+)/, `export interface ${pureClassName}`);
  // 写入新文件删除旧文件
  fs.writeFileSync(path.join(modelDir, newFileName), newContent, 'utf8');
  fs.unlinkSync(filePath);
});

把上述脚本存为post-process.js,在生成命令后执行node post-process.js即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 11:39:02