前言
随着国产 EDA 的快速普及,嘉立创 EDA 已经成为国内硬件工程师、学生、创客群体最常用的 PCB 设计工具之一。但在实际工作中,我们常常会遇到大量重复性操作:批量修改上百个过孔尺寸、手动绕几十组等长线、逐个绘制标准封装、反复调整差分线间距...... 这些机械性工作不仅耗时耗力,还容易出错。
嘉立创 EDA 开放的SKILLS 级扩展插件体系,正是解决这些痛点的最佳方案。通过二次开发,我们可以把重复工作自动化、把定制需求工具化、把设计规范固化到插件里,极大提升设计效率。
很多工程师对二次开发望而却步,觉得 "要懂很多编程知识""门槛很高"。其实嘉立创 EDA 的二次开发门槛非常低:基于 JavaScript/TypeScript 语言,API 设计简洁易懂,官方提供完整的 SDK 模板,哪怕只有一点编程基础,也能快速开发出实用的工具。
这篇文章,我们从最基础的环境搭建讲起,深入解析扩展配置、核心 API、对象模型,再通过批量工具、自动布线、自动等长布线、自动差分线、自动封装绘制五大实战项目,带你从零掌握 SKILLS 级插件的开发方法。有入门级的 step-by-step 教程,也有工程级的优化技巧,读完就能动手开发自己的插件。
第一章 嘉立创 EDA 二次开发体系全景
1.1 什么是 SKILLS 级扩展插件
SKILLS 级扩展(Extension)是嘉立创 EDA 专业版推出的完整插件开发体系,允许开发者调用 EDA 内核 API,开发自定义功能工具,并且可以集成到 EDA 的菜单、工具栏、右键菜单中,就像原生功能一样使用。
简单来说:原生功能满足通用需求,扩展插件满足定制化、自动化、批量化的个性化需求。
它的核心价值体现在四个方面:
- 效率提升:批量处理重复操作,一键完成几十步手动工作
- 规范固化:把企业的设计规范、检查标准做成插件,保证所有设计一致性
- 功能扩展:补充原生没有的功能,比如特殊的自动布线、定制化 BOM 导出
- 生态连接:打通 EDA 与其他工具的链路,比如直接调用仿真、生产、管理系统
1.2 两套开发体系:专业版扩展 vs 标准版脚本
嘉立创 EDA 实际上有两套二次开发体系,分别对应专业版和标准版,定位和能力差异很大,很多初学者容易混淆。我们用一张表完整对比:
| 对比维度 | 专业版扩展(SKILLS 级插件) | 标准版轻量脚本 |
|---|---|---|
| 定位 | 完整工具级插件,可发布上架 | 临时一次性脚本,快速处理 |
| 运行环境 | 专业版内置 Node.js+Chromium 扩展宿主 | 标准版浏览器沙箱环境 |
| 开发语言 | TypeScript(推荐)/ JavaScript | 纯 JavaScript |
| API 权限 | 全量 API:UI 扩展、文件 IO、系统交互、画布操作 | 有限 API:仅画布内元素操作 |
| UI 能力 | 可自定义对话框、侧边栏、菜单、工具栏按钮 | 无自定义 UI,仅原生弹窗 |
| 入口方式 | 顶部菜单、右键菜单、工具栏按钮、命令面板 | 手动粘贴运行或脚本管理器保存 |
| 打包形式 | 编译打包为.eext扩展包,可安装卸载 |
单.js文本文件 |
| 发布方式 | 可发布到扩展广场,所有用户安装使用 | 个人本地使用,无法公开发布 |
| 性能 | 原生级性能,支持大数据量批量操作 | 性能一般,大数据量易卡顿 |
| 调试方式 | 日志调试、断点调试、独立脚本验证 | 仅输出日志调试 |
| 适用场景 | 复杂工具开发、企业定制功能、公开分享 | 临时批量处理、简单计算、一次性操作 |
| 学习门槛 | 稍高,需要了解工程化开发 | 极低,懂 JS 就能写 |
选型建议:如果只是临时改个线宽、批量挪个器件,用标准版脚本足够;如果想做成完整工具、经常使用、或者需要复杂 UI 和文件操作,一定要用专业版扩展。
1.3 技术栈深度解析
嘉立创 EDA 扩展的技术栈对前端工程师非常友好,对硬件工程师也很容易上手。
1.3.1 核心开发语言
- TypeScript(推荐):微软推出的类型增强版 JavaScript,有类型提示、编译时检查,适合开发中大型插件,能大幅减少运行时错误。官方 SDK 默认使用 TS。
- JavaScript:原生 JS 也可以直接开发,适合小工具和快速原型,无需编译。
1.3.2 运行时架构
专业版扩展采用双进程模型:
- 主进程:Node.js 环境,负责文件 IO、系统调用、复杂计算、扩展管理,权限高
- 渲染进程:Chromium 环境,负责 UI 渲染、画布交互,运行扩展的前端代码
两者通过 IPC 通信,API 层做了封装,开发者感知不到进程差异,直接调用全局eda对象即可。
1.3.3 构建工具链
- 包管理:npm/yarn,管理第三方依赖
- 编译工具:TypeScript 编译器,把 TS 编译为 JS
- 打包工具 :官方 SDK 内置打包器,把代码、资源、配置打包成
.eext格式 - 调试工具:VS Code + Chrome DevTools,支持断点调试
1.4 扩展的运行原理与沙箱机制
很多人关心安全问题:插件会不会乱改文件、会不会有病毒?嘉立创 EDA 的扩展有严格的沙箱机制:
- 权限声明制 :所有权限必须在
extension.json中声明,用户安装时会提示权限列表 - 文件系统沙箱:默认只能访问 EDA 指定的目录,不能随意访问磁盘文件
- 网络沙箱:默认禁止网络访问,需要申请网络权限
- 审核机制:上架扩展广场的插件都要经过官方审核,确保安全
1.5 与主流 EDA 脚本体系对比
客观来看,每个 EDA 的二次开发体系各有优劣:
| EDA 软件 | 二次开发语言 | 特点 | 上手难度 | 生态丰富度 |
|---|---|---|---|---|
| Cadence Allegro | Skill 语言 | 功能极强,内核级控制,几乎无所不能 | 难 | 非常丰富 |
| Altium Designer | VBScript/Delphi | 易用,Windows 生态好,功能较全 | 中等 | 丰富 |
| KiCad | Python | 开源免费,跨平台,社区活跃 | 中等 | 较丰富 |
| 嘉立创 EDA | JavaScript/TypeScript | 门槛最低,上手最快,国产生态适配好 | 简单 | 快速发展中 |
嘉立创 EDA 二次开发的最大优势是门槛低、上手快、中文生态好,对于国内工程师来说,学习成本远低于国外 EDA 的脚本语言。
第二章 开发环境从零搭建
2.1 前置依赖安装与配置
2.1.1 Node.js 安装与版本选择
Node.js 是运行 TypeScript 和 npm 的基础,是开发扩展的必备环境。
版本选择:
- 推荐:Node.js 18.x LTS 或 20.x LTS(长期支持版)
- 不推荐:最新尝鲜版,可能有兼容性问题
- 最低要求:16.x 以上
安装步骤:
-
去 Node.js 官网下载对应系统的安装包(Windows 选.msi,Mac 选.pkg)
-
双击安装,一路下一步,默认会自动配置环境变量
-
安装完成后,打开命令提示符(CMD)或终端,输入以下命令验证:
node -v
输出类似 v18.17.0 表示安装成功
npm -v
输出类似 9.6.7 表示npm安装成功
常见问题:
-
如果提示
node不是内部或外部命令,说明环境变量没配置好,手动把 Node.js 安装目录加到系统 PATH 里 -
npm 安装慢,可以切换淘宝镜像:
npm config set registry https://registry.npmmirror.com
2.1.2 VS Code 开发环境配置
推荐使用 VS Code 作为代码编辑器,对 TypeScript 支持最好。
必备插件:
- JavaScript and TypeScript Nightly:微软官方的 TS 语言支持,提供代码提示、补全、跳转
- ESLint:代码规范检查,提前发现错误
- Path Intellisense:路径自动补全
可选优化插件:
- Todo Tree:标记待办事项
- Better Comments:彩色注释
2.1.3 嘉立创 EDA 专业版安装
开发扩展必须安装嘉立创 EDA 专业版客户端,网页版不支持扩展开发。
- 下载地址:嘉立创 EDA 官网 → 下载 → 专业版客户端
- 版本要求:V2.3.0 以上,建议用最新正式版
- 安装后登录账号,确保能正常打开 PCB 文件
2.2 SDK 模板工程获取与初始化
官方提供了标准的模板工程,已经配置好编译、打包、类型声明,不用从零搭工程。
2.2.1 克隆模板工程
打开终端,进入你想存放工程的目录,执行:
# 克隆官方模板仓库
git clone https://gitee.com/JLCEDA/pro-extension-sdk-template.git jlceda-skills-demo
# 进入工程目录
cd jlceda-skills-demo
没有 git 的话,也可以直接去 Gitee 仓库下载 ZIP 压缩包,解压后使用。
2.2.2 安装依赖
npm install
这个命令会自动下载所有需要的依赖包,包括 TypeScript、类型声明、打包工具等。网络不好的话多试几次,或者用淘宝镜像。
2.2.3 工程目录结构深度解析
安装完依赖后,你会看到这样的目录结构,每个文件和文件夹都有明确的作用:
jlceda-skills-demo/
├── src/ # 【核心】源代码目录,所有业务代码写在这里
│ └── index.ts # 扩展入口文件,activate/deactivate函数在这里
├── images/ # 资源目录,放图标、截图等图片
│ └── logo.png # 扩展图标,建议256x256 PNG
├── extension.json # 【核心】扩展配置文件,定义所有元信息
├── package.json # npm项目配置,依赖、脚本、版本信息
├── tsconfig.json # TypeScript编译配置
├── .edaignore # 打包忽略文件,类似.gitignore
└── README.md # 扩展说明文档
我们重点讲三个最核心的文件:
src/index.ts:插件的代码入口,扩展激活时执行activate函数,卸载时执行deactivate函数。所有功能逻辑都从这里开始。extension.json:插件的 "身份证",告诉 EDA 这个插件叫什么、有什么功能、菜单在哪里、需要什么权限。package.json:Node.js 项目的配置文件,管理依赖和脚本命令。
2.2.4 package.json 脚本说明
打开package.json,可以看到几个预设的脚本命令:
| 命令 | 作用 |
|---|---|
npm run dev |
开发模式,监听文件变化,自动编译 |
npm run build |
生产构建,编译并打包生成.eext扩展包 |
npm run compile |
只编译 TypeScript,不打包 |
2.3 第一个 Hello World 扩展
我们来写第一个最简单的扩展:点击菜单弹出 "Hello World" 提示。
2.3.1 编写入口代码
打开src/index.ts,输入以下代码:
/**
* 第一个扩展插件:Hello World
*/
// 扩展激活时自动调用
export function activate() {
// 注册一个命令,命令ID为"hello-world"
eda.sys_Command.registerCommand("hello-world", () => {
// 命令执行时,弹出消息提示
eda.sys_Message.showMessage(
"Hello 嘉立创EDA SKILLS!",
ESYS_ToastMessageType.INFO
);
});
}
// 扩展卸载时自动调用
export function deactivate() {
// 在这里清理资源、移除事件监听
console.log("扩展已卸载");
}
代码解释:
activate:扩展的入口函数,EDA 加载扩展时自动执行eda.sys_Command.registerCommand:注册一个命令,命令 ID 是唯一标识eda.sys_Message.showMessage:弹出右下角消息提示ESYS_ToastMessageType是枚举类型,有 INFO、WARNING、ERROR、SUCCESS 四种
2.3.2 配置 extension.json
打开extension.json,修改为以下内容:
{
"name": "hello-world-demo",
"uuid": "请替换为你自己生成的UUID",
"displayName": "Hello World演示",
"description": "第一个嘉立创EDA扩展插件,弹出Hello World",
"publisher": "Demo开发者",
"version": "1.0.0",
"license": "MIT",
"engines": {
"eda": "^2.3.0"
},
"categories": "其他",
"entry": "./dist/index",
"images": {
"logo": "./images/logo.png"
},
"headerMenus": {
"tools": [
{
"id": "hello-world-menu",
"title": "Hello World测试",
"command": "hello-world"
}
]
}
}
关键配置说明:
name:扩展唯一标识,只能用小写字母、数字、横杠,不能有中文和空格uuid:全球唯一 ID,可以用在线 UUID 生成工具生成一个,不能和其他扩展重复entry:编译后的入口文件路径,默认./dist/index,不要改headerMenus.tools:在顶部 "工具" 菜单下添加一个菜单项,点击执行command对应的命令
2.3.3 编译打包
在终端执行:
npm run build
编译成功后,会在build/dist/目录下生成一个.eext文件,这就是我们的扩展安装包。
2.3.4 导入 EDA 测试
- 打开嘉立创 EDA 专业版
- 顶部菜单 → 高级 → 扩展管理器
- 点击右上角 导入扩展 ,选择刚才生成的
.eext文件 - 安装完成后,重启 EDA
- 打开任意一个 PCB 文件,点击顶部菜单 工具 → Hello World 测试
- 如果右下角弹出 "Hello 嘉立创 EDA SKILLS!",恭喜你,第一个扩展开发成功!
2.4 常见环境问题排查
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| npm install 报错 | 网络问题、版本不兼容 | 切换淘宝镜像,升级 Node.js 到 LTS 版本 |
| 编译失败,提示类型错误 | TS 语法错误,或者 API 拼写错误 | 检查代码拼写,确认方法名和参数正确 |
| 导入扩展后菜单不显示 | extension.json 配置错误,或者命令 ID 不匹配 | 检查 command 字段和 registerCommand 的 ID 是否完全一致 |
| 点击菜单没反应 | 入口函数没导出,或者代码有异常 | 检查是否 export 了 activate 函数,查看扩展日志的报错信息 |
| 扩展安装失败 | 版本不兼容,或者包损坏 | 确认 EDA 版本满足 engines 要求,重新 build |