嘉立创 EDA SKILLS 级插件二次开发完全指南:从环境搭建到自动布线 / 等长 / 差分 / 封装绘制实战——上

前言

随着国产 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 的菜单、工具栏、右键菜单中,就像原生功能一样使用。

简单来说:原生功能满足通用需求,扩展插件满足定制化、自动化、批量化的个性化需求。

它的核心价值体现在四个方面:

  1. 效率提升:批量处理重复操作,一键完成几十步手动工作
  2. 规范固化:把企业的设计规范、检查标准做成插件,保证所有设计一致性
  3. 功能扩展:补充原生没有的功能,比如特殊的自动布线、定制化 BOM 导出
  4. 生态连接:打通 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 运行时架构

专业版扩展采用双进程模型:

  1. 主进程:Node.js 环境,负责文件 IO、系统调用、复杂计算、扩展管理,权限高
  2. 渲染进程:Chromium 环境,负责 UI 渲染、画布交互,运行扩展的前端代码

两者通过 IPC 通信,API 层做了封装,开发者感知不到进程差异,直接调用全局eda对象即可。

1.3.3 构建工具链
  • 包管理:npm/yarn,管理第三方依赖
  • 编译工具:TypeScript 编译器,把 TS 编译为 JS
  • 打包工具 :官方 SDK 内置打包器,把代码、资源、配置打包成.eext格式
  • 调试工具:VS Code + Chrome DevTools,支持断点调试

1.4 扩展的运行原理与沙箱机制

很多人关心安全问题:插件会不会乱改文件、会不会有病毒?嘉立创 EDA 的扩展有严格的沙箱机制:

  1. 权限声明制 :所有权限必须在extension.json中声明,用户安装时会提示权限列表
  2. 文件系统沙箱:默认只能访问 EDA 指定的目录,不能随意访问磁盘文件
  3. 网络沙箱:默认禁止网络访问,需要申请网络权限
  4. 审核机制:上架扩展广场的插件都要经过官方审核,确保安全

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 以上

安装步骤:

  1. 去 Node.js 官网下载对应系统的安装包(Windows 选.msi,Mac 选.pkg)

  2. 双击安装,一路下一步,默认会自动配置环境变量

  3. 安装完成后,打开命令提示符(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 支持最好。

必备插件:

  1. JavaScript and TypeScript Nightly:微软官方的 TS 语言支持,提供代码提示、补全、跳转
  2. ESLint:代码规范检查,提前发现错误
  3. 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                 # 扩展说明文档

我们重点讲三个最核心的文件:

  1. src/index.ts :插件的代码入口,扩展激活时执行activate函数,卸载时执行deactivate函数。所有功能逻辑都从这里开始。
  2. extension.json:插件的 "身份证",告诉 EDA 这个插件叫什么、有什么功能、菜单在哪里、需要什么权限。
  3. 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 测试
  1. 打开嘉立创 EDA 专业版
  2. 顶部菜单 → 高级 → 扩展管理器
  3. 点击右上角 导入扩展 ,选择刚才生成的.eext文件
  4. 安装完成后,重启 EDA
  5. 打开任意一个 PCB 文件,点击顶部菜单 工具 → Hello World 测试
  6. 如果右下角弹出 "Hello 嘉立创 EDA SKILLS!",恭喜你,第一个扩展开发成功!

2.4 常见环境问题排查

问题现象 可能原因 解决方案
npm install 报错 网络问题、版本不兼容 切换淘宝镜像,升级 Node.js 到 LTS 版本
编译失败,提示类型错误 TS 语法错误,或者 API 拼写错误 检查代码拼写,确认方法名和参数正确
导入扩展后菜单不显示 extension.json 配置错误,或者命令 ID 不匹配 检查 command 字段和 registerCommand 的 ID 是否完全一致
点击菜单没反应 入口函数没导出,或者代码有异常 检查是否 export 了 activate 函数,查看扩展日志的报错信息
扩展安装失败 版本不兼容,或者包损坏 确认 EDA 版本满足 engines 要求,重新 build
相关推荐
小码农叔叔6 个月前
【AI智能体】Skills 智能体驱动开发从使用到项目实战详解
skills·skills使用详解·skills详解·skills使用·skills实战·skills开发·skills自定义开发