UNPKG

@ry-krystal/kicad-converter

Version:

专业的KiCad符号文件与JSON互转工具

715 lines (554 loc) 20.3 kB
# KiCad转换器 v2.0 🚀 **专业的KiCad符号文件与JSON互转工具** 一个功能完整、高性能的数据转换工具,支持KiCad符号库文件(.kicad_sym)与JSON格式之间的双向转换。 ## 📋 目录 - [核心特性](#-核心特性) - [安装与使用](#-安装与使用) - [全局安装(推荐)](#方式一全局安装推荐) - [使用 npx](#方式二使用-npx无需安装) - [本地项目运行](#方式三本地项目运行) - [使用指南](#-使用指南) - [全局命令行使用](#全局命令行使用推荐方式) - [本地 NPM 脚本使用](#本地-npm-脚本使用) - [使用场景示例](#-使用场景示例) - [项目架构](#-项目架构) - [程序化API](#-程序化api) - [常见问题](#-常见问题) - [性能数据](#-性能数据) - [发布和分发](#-发布和分发) - [贡献指南](#-贡献指南) ## ✨ 核心特性 ### 🔄 双向转换 - **KiCad → JSON**: 将KiCad符号文件转换为结构化JSON - **JSON → KiCad**: 将JSON数据转换回KiCad符号文件 - **完整保真**: 支持所有KiCad符号格式特性 - **数据验证**: 内置完整性检查和错误修复 ### ⚡ 高性能处理 - **双引擎架构**: 核心版(稳定)+ 增强版(高性能) - **批量处理**: 支持目录递归转换 - **流式处理**: 处理大型符号库文件 - **智能缓存**: 提升重复操作性能 ### 🛠️ 多种使用方式 - **NPM脚本命令**: 完整的本地CLI界面 - **程序化API**: TypeScript/JavaScript库 - **批量操作**: 目录级别的批量转换 - **数据验证**: 独立的验证功能 ## 📦 安装与使用 ### 方式一:全局安装(推荐) #### 从 npm 安装 ```bash # 全局安装 npm install -g @ry-krystal/kicad-converter # 在任意位置使用 kicad-converter --help ``` #### 本地构建并全局安装 ```bash # 1. 克隆或下载项目 git clone <repository-url> cd react-demo # 2. 安装依赖并构建 npm install npm run build # 3. 全局链接 npm link # 4. 验证安装 kicad-converter --help ``` ### 方式二:使用 npx(无需安装) ```bash # 直接使用 npx 运行 npx @ry-krystal/kicad-converter --help npx @ry-krystal/kicad-converter -i input.kicad_sym -o output.json ``` ### 方式三:本地项目运行 ```bash # 1. 进入项目目录 cd /path/to/react-demo # 2. 安装依赖(如果还没安装) npm install # 3. 构建项目 npm run build # 4. 验证所有功能 npm run convert -- --help ``` ## 🚀 使用指南 ### 全局命令行使用(推荐方式) 安装后,可以在任意位置使用 `kicad-converter` 命令: #### 基本语法 ```bash kicad-converter [选项] [参数] ``` #### 常用命令 ```bash # 显示帮助信息 kicad-converter --help # 显示版本信息 kicad-converter --version # KiCad 转 JSON kicad-converter -i input.kicad_sym -o output.json -m to-json # JSON 转 KiCad kicad-converter -i input.json -o output.kicad_sym -m to-kicad # 自动检测格式转换 kicad-converter -i input.kicad_sym -o output.json # 批量处理目录 kicad-converter --batch -i ./symbols/ -o ./converted/ # 递归处理子目录 kicad-converter --batch --recursive -i ./input/ -o ./output/ # 验证文件格式 kicad-converter --validate -i input.kicad_sym # 显示文件统计信息 kicad-converter --stats -i input.kicad_sym # 使用增强引擎 kicad-converter -e enhanced -i input.kicad_sym -o output.json # 详细输出模式 kicad-converter --verbose -i input.kicad_sym -o output.json # 静默模式 kicad-converter --quiet -i input.kicad_sym -o output.json ``` #### 命令选项说明 | 选项 | 简写 | 说明 | 示例 | |------|------|------|------| | `--input` | `-i` | 输入文件路径 | `-i input.kicad_sym` | | `--output` | `-o` | 输出文件路径 | `-o output.json` | | `--mode` | `-m` | 转换模式 | `-m to-json` 或 `-m to-kicad` | | `--engine` | `-e` | 转换引擎 | `-e enhanced` 或 `-e core` | | `--batch` | `-b` | 批量处理模式 | `--batch` | | `--recursive` | `-r` | 递归处理子目录 | `--recursive` | | `--validate` | - | 启用数据验证 | `--validate` | | `--optimize` | - | 启用输出优化 | `--optimize` | | `--stats` | - | 显示详细统计 | `--stats` | | `--verbose` | `-v` | 详细输出模式 | `--verbose` | | `--quiet` | `-q` | 静默模式 | `--quiet` | | `--help` | `-h` | 显示帮助信息 | `--help` | | `--version` | - | 显示版本信息 | `--version` | #### 实际使用示例 ```bash # 转换单个文件(自动检测格式) kicad-converter -i amplifier.kicad_sym -o amplifier.json # 指定转换模式和引擎 kicad-converter -i amplifier.kicad_sym -o amplifier.json -m to-json -e enhanced # 批量转换整个目录 kicad-converter --batch -i ./kicad-symbols/ -o ./json-output/ # 验证文件并显示统计信息 kicad-converter --validate --stats -i amplifier.kicad_sym # 静默模式批量转换(适合脚本使用) kicad-converter --quiet --batch -i ./input/ -o ./output/ # 详细模式转换(查看处理过程) kicad-converter --verbose -i amplifier.kicad_sym -o amplifier.json ``` ### 本地 NPM 脚本使用 如果在项目目录内运行,也可以使用 npm 脚本: ```bash # KiCad文件转JSON npm run kicad-to-json -- input.kicad_sym output.json # JSON文件转KiCad npm run json-to-kicad -- input.json output.kicad_sym # 自动检测格式转换 npm run convert -- input.kicad_sym # 查看帮助 npm run convert -- --help ``` ## 📋 可用命令 ### NPM脚本命令 | 脚本命令 | 功能说明 | 示例用法 | 状态 | |----------|----------|----------|------| | `npm run convert` | 通用转换命令,自动检测文件格式 | `npm run convert -- input.kicad_sym output.json` | ✅ | | `npm run kicad-to-json` | KiCad文件转JSON格式 | `npm run kicad-to-json -- input.kicad_sym output.json` | ✅ | | `npm run json-to-kicad` | JSON文件转KiCad格式 | `npm run json-to-kicad -- input.json output.kicad_sym` | ✅ | | `npm run batch` | 批量处理多个文件 | `npm run batch -- ./input_dir/ ./output_dir/` | ✅ | | `npm run validate` | 验证文件格式和数据完整性 | `npm run validate -- input.kicad_sym` | ✅ | | `npm run stats` | 显示文件统计信息 | `npm run stats -- input.kicad_sym` | ✅ | | `npm run demo` | 运行功能演示 | `npm run demo` | ✅ | | `npm run benchmark` | 性能基准测试 | `npm run benchmark` | ✅ | ### 开发和构建命令 | 脚本命令 | 功能说明 | 示例用法 | 状态 | |----------|----------|----------|------| | `npm run dev` | 开发模式运行 | `npm run dev -- --help` | ✅ | | `npm run build` | 构建项目 | `npm run build` | ✅ | | `npm run typecheck` | TypeScript类型检查 | `npm run typecheck` | ✅ | | `npm run clean` | 清理构建文件 | `npm run clean` | ✅ | ## 🎯 使用说明 ### 命令行语法 ```bash # 基本语法 npm run <script-name> -- [参数] # 重要:-- 是必需的! npm run convert --help # ❌ 显示npm的帮助 npm run convert -- --help # ✅ 显示转换器的帮助 ``` ### 可用参数 | 参数 | 说明 | 完整示例 | |------|------|----------| | `--mode` | 转换模式:`to-json` 或 `to-kicad` | `npm run convert -- --mode to-json input.kicad_sym` | | `--engine` | 转换引擎:`core` 或 `enhanced` | `npm run convert -- --engine enhanced input.kicad_sym` | | `--validate` | 启用数据验证 | `npm run convert -- --validate input.kicad_sym` | | `--optimize` | 启用输出优化 | `npm run convert -- --optimize input.kicad_sym` | | `--stats` | 显示详细统计 | `npm run convert -- --stats input.kicad_sym` | | `--verbose` | 详细输出模式 | `npm run convert -- --verbose input.kicad_sym` | | `--quiet` | 静默模式 | `npm run convert -- --quiet input.kicad_sym` | | `--help` | 显示帮助信息 | `npm run convert -- --help` | ### 实际使用示例 ```bash # 转换项目中的示例文件 npm run kicad-to-json -- "Amplifier_Audio_output.kicad_sym" "output.json" # 反向转换验证 npm run json-to-kicad -- "output.json" "converted_back.kicad_sym" # 使用增强版引擎并显示统计 npm run convert -- --engine enhanced --stats "Amplifier_Audio_output.kicad_sym" # 批量处理目录 npm run batch -- ./symbols/ ./output/ # 验证文件格式 npm run validate -- "Amplifier_Audio_output.kicad_sym" ``` ## 🏗️ 项目架构 ### 目录结构 ``` react-demo/ ├── src/ │ ├── core/ # 核心转换引擎 │ │ ├── parser.ts # KiCad S表达式解析器 │ │ ├── converter.ts # JSON转换器 │ │ ├── generator.ts # KiCad文件生成器 │ │ ├── validator.ts # 数据验证器 │ │ └── index.ts # 核心模块导出 │ ├── enhanced/ # 增强版转换器 │ │ ├── converter.ts # 高性能转换器 │ │ └── index.ts # 增强模块导出 │ ├── cli/ # 命令行工具 │ │ ├── main.ts # CLI主入口 │ │ ├── commands/ # 具体命令实现 │ │ │ ├── convert.ts # 转换命令 │ │ │ ├── batch.ts # 批量处理命令 │ │ │ └── validate.ts # 验证命令 │ │ └── utils/ # CLI工具函数 │ ├── utils/ # 通用工具 │ └── index.ts # 主入口 ├── examples/ # 使用示例 │ └── demo.ts # 功能演示脚本 ├── tests/ # 测试文件 ├── package.json # 项目配置和脚本 ├── tsconfig.json # TypeScript配置 └── README.md # 项目文档 ``` ### 核心模块 #### 转换引擎 (`src/core/`) - **parser.ts**: KiCad S表达式解析器,处理.kicad_sym文件格式 - **converter.ts**: 双向转换核心逻辑,提供convertKiCadToJson、convertJsonToKicad - **generator.ts**: KiCad文件生成器,输出标准格式 - **validator.ts**: 数据验证器,确保转换质量 - **index.ts**: 导出所有核心API #### 增强功能 (`src/enhanced/`) - **converter.ts**: 高性能转换器,优化大文件处理 - **EnhancedConverter类**: 提供额外的性能优化和错误恢复 #### 命令行工具 (`src/cli/`) - **main.ts**: CLI入口,参数解析和命令分发 - **commands/**: 各种具体命令的实现逻辑 ## ✅ 已验证功能 ### 转换功能测试结果 | 功能 | 状态 | 测试文件 | 性能 | |------|------|----------|------| | KiCad → JSON | ✅ 通过 | `Amplifier_Audio_output.kicad_sym` | 0.02-0.03秒 | | JSON → KiCad | ✅ 通过 | 反向转换 | 0.01秒 | | 双向转换完整性 | ✅ 通过 | 往返转换验证 | 数据无损失 | | 自动格式检测 | ✅ 通过 | 多种文件格式 | 100%准确 | | 批量处理 | ✅ 通过 | 目录处理 | 支持递归 | | 数据验证 | ✅ 通过 | 格式验证 | 错误检测准确 | ### 支持的文件格式 - ✅ **KiCad符号库文件** (`.kicad_sym`) - 完整支持所有属性 - ✅ **JSON格式** (`.json`) - 结构化数据输出 - ✅ **符号属性** - Reference、Value、Footprint、Datasheet等 - ✅ **引脚信息** - 完整的引脚定义和属性 - ✅ **图形元素** - 矩形、线条、文本等绘图元素 - ✅ **版本兼容** - 支持KiCad 9.x格式 ## 🧪 程序化API ### 基础使用(在项目中) ```typescript // 导入核心转换功能 import { convertKiCadToJson, convertJsonToKicad } from './src/core'; import { EnhancedConverter } from './src/enhanced'; import { readFileSync } from 'fs'; // 基本转换示例 const kicadContent = readFileSync('input.kicad_sym', 'utf8'); const jsonResult = await convertKiCadToJson(kicadContent, { validateOutput: true, optimizeOutput: true }); if (jsonResult.success) { console.log('转换成功!', jsonResult.data); console.log('统计信息:', jsonResult.statistics); } // 反向转换 const jsonContent = JSON.stringify(jsonResult.data); const kicadResult = await convertJsonToKicad(jsonContent, { validateOutput: true }); ``` ### 增强版转换器 ```typescript import { EnhancedConverter } from './src/enhanced'; const converter = new EnhancedConverter({ validateOutput: true, optimizeOutput: true, verbose: false }); const result = await converter.kicadToJson(kicadContent); if (result.success) { console.log('增强版转换完成:', result.statistics); } ``` ### 通过脚本使用 ```javascript // 创建转换脚本 convert-script.js const { execSync } = require('child_process'); // 使用npm脚本进行转换 execSync('npm run kicad-to-json -- input.kicad_sym output.json', { stdio: 'inherit' }); console.log('转换完成!'); ``` ## 🔧 常见问题 ### 安装和使用问题 **Q: 提示"kicad-converter 无法识别"** ```bash # 原因:未全局安装或安装失败 # 解决方案1:重新全局安装 npm install -g @ry-krystal/kicad-converter # 解决方案2:使用 npx(无需安装) npx @ry-krystal/kicad-converter --help # 解决方案3:本地链接(开发模式) cd /path/to/project && npm link ``` **Q: 全局安装后仍然无法使用** ```bash # 检查全局安装路径 npm list -g --depth=0 # 检查 PATH 环境变量包含 npm 全局目录 npm config get prefix # Windows 上确保以下路径在 PATH 中: # %APPDATA%\npm (通常是 C:\Users\用户名\AppData\Roaming\npm) # macOS/Linux 确保以下路径在 PATH 中: # /usr/local/bin 或者 npm config get prefix 显示的路径 ``` **Q: 权限问题(macOS/Linux)** ```bash # 使用 sudo 安装(不推荐) sudo npm install -g @ry-krystal/kicad-converter # 更好的方案:配置 npm 全局路径 mkdir ~/.npm-global npm config set prefix '~/.npm-global' echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.bashrc source ~/.bashrc npm install -g @ry-krystal/kicad-converter ``` **Q: 本地项目模式下的命令格式** ```bash # ❌ 错误:忘记使用 npm run 前缀 kicad-converter input.kicad_sym # ✅ 正确:在项目目录内使用 npm 脚本 npm run convert -- input.kicad_sym # ❌ 错误:忘记 -- 分隔符 npm run convert --help # ✅ 正确:使用 -- 分隔 npm 参数和工具参数 npm run convert -- --help ``` **Q: 版本兼容性问题** ```bash # 检查 Node.js 版本(需要 >= 18.0.0) node --version # 检查工具版本 kicad-converter --version # 如果 Node.js 版本过低,请升级: # Windows: 从 https://nodejs.org/ 下载安装 # macOS: brew install node # Linux: 使用包管理器或 nvm ``` ### 文件路径问题(Windows) ```bash # Windows路径处理 npm run kicad-to-json -- "d:\path with spaces\file.kicad_sym" "output.json" # 或使用正斜杠 npm run kicad-to-json -- "d:/path/file.kicad_sym" "output.json" ``` ### 开发相关 ```bash # 修改代码后需要重新构建 npm run build # 或使用开发模式直接运行 npm run dev -- --help # 类型检查 npm run typecheck # 清理重建 npm run clean && npm run build ``` ## 🔧 开发 ### 构建和开发 ```bash # 开发模式(直接运行TypeScript) npm run dev -- --help # 构建项目 npm run build # 类型检查 npm run typecheck # 清理构建文件 npm run clean ``` ### 开发工作流 ```bash # 1. 修改代码后测试功能 npm run dev -- input.kicad_sym output.json # 2. 构建验证 npm run build # 3. 运行完整测试 npm run demo npm run benchmark # 4. 验证特定功能 npm run convert -- --stats "test_file.kicad_sym" ``` ## 📊 性能数据 ### 实际测试结果 | 操作 | 测试文件 | 文件大小 | 处理时间 | 状态 | |------|----------|----------|----------|------| | KiCad解析 | `Amplifier_Audio_output.kicad_sym` | ~50KB | 0.02-0.03秒 | ✅ | | JSON生成 | 转换后的JSON | ~45KB | 同上 | ✅ | | KiCad生成 | 反向转换 | ~50KB | 0.01秒 | ✅ | | 数据验证 | 完整性检查 | - | <0.01秒 | ✅ | ## 📦 发布和分发 ### 发布到 npm ```bash # 1. 更新版本号 npm version patch # 或 minor, major # 2. 构建项目 npm run build # 3. 发布到 npm npm publish # 4. 验证发布 npm view @ry-krystal/kicad-converter ``` ### 用户安装方式 发布后,用户可以通过以下方式使用: ```bash # 方式1:全局安装 npm install -g @ry-krystal/kicad-converter kicad-converter --help # 方式2:npx 使用(推荐给临时用户) npx @ry-krystal/kicad-converter --help # 方式3:项目依赖 npm install @ry-krystal/kicad-converter npx kicad-converter --help ``` ### 离线分发 ```bash # 1. 打包项目 npm pack # 2. 生成 .tgz 文件,可以离线安装 npm install -g ry-krystal-kicad-converter-1.0.6.tgz ``` ## 🤝 贡献指南 ### 开发流程 1. Fork项目仓库 2. 创建功能分支: `git checkout -b feature/awesome-feature` 3. 修改代码并测试: `npm run dev -- --help` 4. 构建验证: `npm run build` 5. 全局链接测试: `npm link && kicad-converter --help` 6. 提交更改: `git commit -m 'Add awesome feature'` 7. 推送分支: `git push origin feature/awesome-feature` 8. 创建Pull Request ### 开发规范 - 使用TypeScript严格模式 - 修改后运行 `npm run typecheck` - 确保所有npm脚本正常工作 - 测试全局命令行功能 - 更新相关文档和示例 ### 测试清单 开发者在提交前应确保: - [ ] `npm run build` 成功 - [ ] `npm run typecheck` 无错误 - [ ] `npm link` 后全局命令可用 - [ ] `kicad-converter --help` 显示正确 - [ ] 基本转换功能正常 - [ ] 更新了相关文档 ## 📄 许可证 本项目采用 [MIT许可证](LICENSE) ## 🙏 致谢 - [KiCad](https://www.kicad.org/) - 开源电子设计自动化套件 - [TypeScript](https://www.typescriptlang.org/) - 类型安全的JavaScript - [Node.js](https://nodejs.org/) - JavaScript运行时环境 --- **⭐ 如果这个项目对您有帮助,请给我们一个星标!** ## 🚀 快速开始测试 ### 全局安装后快速测试 ```bash # 1. 验证安装 kicad-converter --version kicad-converter --help # 2. 下载示例文件或使用项目中的示例 # 如果有现成的 .kicad_sym 文件,直接使用 # 或者从项目中获取示例文件 # 3. 转换测试 kicad-converter -i your-symbol.kicad_sym -o output.json -v kicad-converter -i output.json -o converted-back.kicad_sym -v # 4. 验证转换结果 kicad-converter --validate -i your-symbol.kicad_sym kicad-converter --stats -i your-symbol.kicad_sym ``` ### 本地项目测试 ```bash # 1. 克隆项目并设置 git clone <repository-url> cd react-demo npm install npm run build # 2. 一键验证所有功能 npm run demo # 3. 转换示例文件 npm run kicad-to-json -- "Amplifier_Audio_output.kicad_sym" "test.json" npm run json-to-kicad -- "test.json" "test.kicad_sym" # 4. 查看详细帮助 npm run convert -- --help ``` ## 💡 使用场景示例 ### 场景1:单个文件转换 ```bash # 将 KiCad 符号转换为 JSON 进行数据分析 kicad-converter -i library/74xx.kicad_sym -o data/74xx.json --stats # 修改 JSON 数据后转换回 KiCad 格式 kicad-converter -i data/modified-74xx.json -o library/new-74xx.kicad_sym --validate ``` ### 场景2:批量处理库文件 ```bash # 将整个符号库目录转换为 JSON 格式 kicad-converter --batch --recursive -i ./kicad-libraries/ -o ./json-backup/ # 从 JSON 备份还原符号库 kicad-converter --batch --recursive -i ./json-backup/ -o ./restored-libraries/ ``` ### 场景3:集成到 CI/CD 流程 ```bash #!/bin/bash # build-script.sh # 验证所有符号文件 for file in symbols/*.kicad_sym; do echo "验证文件: $file" kicad-converter --validate --quiet "$file" || exit 1 done # 生成 JSON 格式的符号数据库 kicad-converter --batch --quiet -i symbols/ -o json-database/ echo "符号验证和转换完成" ``` ### 场景4:数据迁移和备份 ```bash # 创建符号库的 JSON 备份 mkdir backup-$(date +%Y%m%d) kicad-converter --batch -i ./symbols/ -o ./backup-$(date +%Y%m%d)/ --verbose # 从备份恢复 kicad-converter --batch -i ./backup-20241201/ -o ./restored-symbols/ ``` ### 场景5:开发调试 ```bash # 详细模式查看转换过程 kicad-converter --verbose --stats -i problematic-symbol.kicad_sym -o debug.json # 验证模式检查文件完整性 kicad-converter --validate -i symbol.kicad_sym # 使用增强引擎处理复杂文件 kicad-converter -e enhanced --optimize -i complex-symbol.kicad_sym -o optimized.json ```