PaddleOCR JS 前端 SDK 开发指南:从环境安装到 npm 产物构建全流程解析
PaddleOCR JS 前端 SDK 开发指南从环境安装到 npm 产物构建全流程解析【免费下载链接】PaddleOCRTurn any PDF or image document into structured data for your AI. A powerful, lightweight OCR toolkit that bridges the gap between images/PDFs and LLMs. Supports 100 languages.项目地址: https://gitcode.com/GitHub_Trending/pa/PaddleOCR本文面向希望参与或深入理解 PaddleOCR JavaScript SDKpaddleocr-js的开发者完整讲解该 monorepo 的安装步骤、常用开发命令、TypeScript 工程规范、Vite 库模式构建流程与测试策略。读完本文你将掌握如何在本仓库中安装依赖、构建 SDK 与 demo、通过自定义 Vite 插件产出兼容 npm 分发的 Worker 产物并理解整个工程在浏览器端 OCR 场景下的设计取舍。所有命令与结论均以当前仓库实际代码为准涉及源码位置均已标注相对路径便于对照查阅。项目与文档背景paddleocr-js是 PaddleOCR 仓库中面向浏览器的 OCR SDK 子工程采用 npm workspaces 组织为 monorepo包含两个 workspacepackages/coreSDK 本体npm 包名为paddleocr/paddleocr-js基于 PaddleOCR 模型、ONNX Runtime Web 与 OpenCV.js在浏览器中完成文本检测、识别等推理见 packages/core/package.jsonapps/demo基于 Vite 的演示应用用于体验与联调 SDK 功能。本文对应的开发指南位于 paddleocr-js/docs/development.md另有中文版 paddleocr-js/docs/development_cn.md。下面的小节严格遵循该文档的脉络展开并补充仓库源码层面的实现细节。环境要求与依赖安装文档首先要求从paddleocr-js/根目录安装依赖npm install从根目录的 package.json 可以看到该工程通过workspaces字段声明了packages/*与apps/*因此一条npm install会统一安装 SDK、demo 以及根目录的工程化工具依赖。安装前请确认 Node.js 版本满足要求根工程与两个 workspace 的package.json中均声明了engines: { node: 20.11 }。SDK 核心依赖如下见 packages/core/package.json依赖作用onnxruntime-webORT JS 运行时负责模型推理与 WASM/WebGPU 后端techstark/opencv-jsOpenCV.js用于图像预处理等 CV 操作clipper-lib多边形裁剪库用于检测结果的几何后处理js-yamlYAML 解析用于模型配置文件的解析根目录还集成了 husky lint-staged 的 Git 提交钩子对*.{js,ts}文件在提交时执行eslint --fix与prettier --write对*.{json,md,html,css,yaml,yml}执行格式化见 package.json保证提交代码风格统一。常用命令速查文档给出了在paddleocr-js/根目录下可用的全部常用命令。对照根 package.json 的scripts字段逐条说明如下npm run build # 先构建 SDK 再构建 demo显式拓扑顺序 npm run build:sdk # 仅构建 SDKpackages/core npm run build:demo # 仅构建 demo 应用apps/demo npm run lint # 对整个仓库执行 ESLint 检查eslint . npm run test # 运行全部 Vitest 单元测试vitest run npm run typecheck # 对所有 workspace 执行 tsc --noEmit 类型检查 npm run check # 完整质量门禁format:check → lint → build:sdk → typecheck → test → build:demo npm run clean # 删除所有 dist/ 目录其中npm run build在根脚本中被定义为npm run build:sdk npm run build:demo通过保证了「先 SDK 后 demo」的显式构建顺序这正是文档所说的 topological order。npm run check是提交/发布前建议执行的全量校验任何一环失败都会中断。开发 demo 时使用 Vite 开发服务器npm run dev:demo该命令对应dev:demo: npm run dev --workspace apps/demo --实际在apps/demoworkspace 内启动 Vite。此外还有npm run preview:demo预览生产构建产物、npm run lint:fix、npm run test:watch、npm run test:coverage等补充脚本。如果需要单独操作某个 workspace可以像文档示例那样显式指定npm run build --workspace packages/core npm run build --workspace apps/demo发布流程对应脚本release: npm run build:sdk npm publish --workspace packages/core即先构建 SDK 再发布paddleocr/paddleocr-js。TypeScript 工程规范SDK 与 demo 均以 TypeScript 编写并开启严格模式文档明确了两点工程约定1. 两套 ESLint 规则集packages/**/src/与apps/**/src/下的源码使用typescript-eslint的strictTypeChecked规则集对类型安全要求最高packages/**/test/下的测试文件使用较轻的recommendedTypeChecked并放宽了no-unsafe-*与no-explicit-any等规则因为测试代码中常需要构造边界输入或进行类型断言。2. 统一的类型检查方式npm run typecheck对应npm run typecheck --workspaces --if-present会递归执行各 workspace 中的tsc --noEmitcore 与 demo 均定义了各自的typecheck脚本。关键点在于demo 的类型检查并不依赖先执行build:sdk。查看 apps/demo/tsconfig.json 可以看到demo 通过paths映射直接把paddleocr/paddleocr-js与paddleocr/paddleocr-js/viz指向packages/core/src下的 TypeScript 源码../../packages/core/src/index.ts、../../packages/core/src/viz/index.ts并额外 include 了../../packages/core/src/types/*.d.ts。因此 demo 始终对着最新源码做类型检查这也是文档强调「does not strictly require build:sdk to run first」的原因。SDK 自身的 tsconfig.json 还开启了declaration、declarationMap、sourceMap用于产出类型声明与源码映射rootDir限定为src。构建流程Vite 库模式与 dist 产物SDK 构建入口与产物结构SDK 使用 Vite 的库模式构建在packages/core中执行npm run build即vite build。从 packages/core/vite.config.ts 可以看到库入口有两个src/index.ts主入口与src/viz/index.ts可视化子路径输出格式仅es对外依赖onnxruntime-web、techstark/opencv-js、clipper-lib、js-yaml被标记为external不打包进产物由使用方自行提供开启了sourcemap且minify: false便于排查线上问题。构建后dist/下的产物与文档列出一致产物说明index.mjsESM 入口index.d.ts类型声明配合exports字段的types指向viz.mjs可视化子路径./viz的 ESM 入口assets/worker-entry-*.js自包含的 Worker bundle内含 OpenCV.js 与 ORT JS 运行时这些产物声明在 packages/core/package.json 的exports字段中主入口.与可视化子路径./viz均区分了types与default这正是浏览器端按需引入paddleocr/paddleocr-js与paddleocr/paddleocr-js/viz的依据。libraryWorkerPlugin面向 npm 分发的关键后处理Worker 是浏览器 OCR 的核心载体模型推理在 Worker 内执行避免阻塞主线程。但 Vite 默认产出「以站点根路径为基准」的绝对资源路径直接发布为 npm 包后下游使用方会因路径解析失败而无法加载 Worker。为此仓库在 packages/core/vite.config.ts 中实现了自定义插件libraryWorkerPlugin对构建产物做三步后处理第 1 步将 Worker 资源的绝对路径改写为相对路径Vite 注入的 Worker 引用形如/* vite-ignore */ /assets/worker-entry-xxx.js插件通过正则将其改写为./assets/worker-entry-xxx.js使文件相对于 SDK 模块自身位置解析而不是依赖站点根路径见 vite.config.ts。第 2 步拆分new Worker(new URL(...))模式插件把new Worker(new URL(./assets/..., import.meta.url), {...})重写为(() { const _w new URL(./assets/..., import.meta.url); return new Worker(_w, {...}); })();即先创建 URL 变量再构造 Worker见 vite.config.ts。这样做的目的是下游打包器如 Vite、webpack的资源复制插件可以识别并复制 Worker 文件而其 Worker 检测插件则不会把该文件当作二次打包目标避免重复处理导致产物异常。第 3 步剥离 base64 内联的 WASM 二进制Vite 会把 ORT 中new URL(./ort-wasm-*.wasm, import.meta.url)形式的引用转成data:application/wasm;base64,...数据 URI 并内联进 Worker据 vite.config.ts 的注释说明这会使 Worker 体积膨胀约 50 MB。插件在generateBundle阶段用正则data:application\/wasm;base64,...将这些 data URI 剥除仅保留前缀占位见 vite.config.ts。剥离后的 WASM 如何在运行时获得文档给出了答案Worker 模式下 ORT 通过ort.env.wasm.wasmPaths在运行时加载 WASM该路径由使用方配置未配置时回退到与安装 ORT 版本绑定的 CDN。仓库在构建期通过define注入__ORT_WASM_CDN_PREFIX__常量值为https://cdn.jsdelivr.net/npm/onnxruntime-web版本号/dist/版本号在构建时从onnxruntime-web包内读取见 vite.config.ts 与 vite.config.ts保证 CDN 回退路径与依赖版本严格一致。一个值得注意的实现细节WASM 剥离必须放在主构建的generateBundle钩子中而不是worker.rollupOptions.plugins里因为 Vite 是在 Worker 自身的 Rollup 流水线结束之后的「后处理」阶段才注入 data URI。同时剥离只针对data:application/wasmOpenCV.js 通过 Emscripten 内嵌的data:application/octet-streamWASM 必须保留——因为 OpenCV.js 没有等价的 CDN 回退机制见 vite.config.ts。demo 应用的开发与生产两套路径apps/demo的构建配置见 apps/demo/vite.config.js开发阶段npm run devVite 通过resolve.alias把paddleocr/paddleocr-js与paddleocr/paddleocr-js/viz直接指向packages/core/src的 TypeScript 源码实现即时 HMR热更新无需预先构建 SDK生产构建npm run buildalias 置空demo 通过 workspace 链接消费 SDK 预构建的dist/此时第 2 步的「兼容下游打包器的 Worker URL 形式」发挥作用Vite 能正确把 Worker 资源复制进 demo 的构建产物。另外demo 的server与preview配置都设置了Cross-Origin-Opener-Policy: same-origin与Cross-Origin-Embedder-Policy: credentialless响应头。这是浏览器端使用 WASM 线程如 ORT 的多线程后端时要求的跨源隔离相关设置开发与预览场景下保持一致避免本地调试与线上行为不一致。测试策略文档将测试策略概括为三层仓库中的测试文件见 packages/core/test与其一一对应1. 配置解析与注册表行为的单元测试对应model-config.test.ts、model-common.test.ts、ocr-config-branches.test.ts、resolve.test.ts等。SDK 依赖js-yaml解析 YAML 模型配置model-config.test.ts覆盖配置文件的解析与校验路径ocr-config-branches.test.ts则针对 OCR 配置的不同分支组合做断言验证配置解析的健壮性。2. 面向浏览器平台辅助函数的轻量级 jsdom 测试对应platform-browser.test.ts、browser-source.test.ts等。jsdom作为 devDependency见根 package.json用于模拟 DOM 环境测试浏览器平台相关的辅助逻辑无需启动真实浏览器。3. CI 默认不运行大规模真实模型推理仓库以轻量测试为主ocr-*、worker-*、runtime-*、pipelines-index.test.ts、public-api.test.ts等覆盖 API 面与 Worker 通信协议tar.test.ts配合tar-fixture.ts验证模型 tar 包解包逻辑viz-*系列覆盖可视化渲染画布工厂、颜色、绘制文本/框、字体等。这类测试不加载真实大模型保证 CI 在合理时间内完成。测试运行器为 Vitest根脚本test: vitest run支持test:watch与test:coverage两种开发辅助模式。总结一条可复现的 SDK 开发工作流综合文档与源码paddleocr-js的日常开发可按如下流程进行安装在paddleocr-js/根目录执行npm installNode.js ≥ 20.11开发调试npm run dev:demo启动 Vite 开发服务器通过 alias 直连 SDK 源码实现 HMR增量构建npm run build:sdk单独构建 SDK观察dist/产物index.mjs、viz.mjs、assets/worker-entry-*.js质量校验npm run check一次性执行格式化检查、lint、SDK 构建、类型检查、测试与 demo 构建发布npm run release先构建 SDK 再发布paddleocr/paddleocr-js到 npm。这套流程的核心价值在于libraryWorkerPlugin它让一个「自带 OpenCV.js ORT 运行时 Worker」的浏览器 OCR SDK 能以标准 npm 包形式分发同时通过运行时 WASM 加载ort.env.wasm.wasmPaths 版本绑定的 CDN 回退显著压缩了 Worker 体积。理解这三步后处理是排查「Worker 404」「Worker 被重复打包」「WASM 加载失败」等下游集成问题的关键也是后续为 SDK 扩展新功能如更多模型子路径、新的可视化能力时的构建基础。【免费下载链接】PaddleOCRTurn any PDF or image document into structured data for your AI. A powerful, lightweight OCR toolkit that bridges the gap between images/PDFs and LLMs. Supports 100 languages.项目地址: https://gitcode.com/GitHub_Trending/pa/PaddleOCR创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

工业项目为何青睐TCP/IP以太网温湿度传感器?选型与应用解析

工业项目为何青睐TCP/IP以太网温湿度传感器?选型与应用解析

这两年做自动化项目,只要有机房、库房、洁净车间、冷库这类场景,甲方十有八九会盯住“温湿度监控”不放。早年间大家习惯了4-20mA电流环变送器,或者RS485总线上一串设备排队轮询,可最近两三年风向明显变了——越来越多的设计院和总…

2026/10/26 10:16:21 阅读更多 →
calibre 电子书转换实战手册:一下午做完的 5 个任务

calibre 电子书转换实战手册:一下午做完的 5 个任务

calibre 电子书转换实战手册:一下午做完的 5 个任务 【免费下载链接】calibre The official source code repository for the calibre ebook manager 项目地址: https://gitcode.com/GitHub_Trending/ca/calibre 你下载的电子书散落在下载文件夹里&#xff1…

2026/10/26 10:16:21 阅读更多 →
元胞自动机在材料生长模拟中的应用与实践

元胞自动机在材料生长模拟中的应用与实践

1. 元胞自动机与材料生长的奇妙邂逅 第一次接触元胞自动机是在研究生阶段的材料模拟课上。当时教授用简单的黑白格子演示了金属晶粒的生长过程,那些看似简单的规则却能复现出复杂的材料微观结构,让我彻底着迷。元胞自动机(Cellular Automata,…

2026/10/26 10:16:21 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/10/26 12:00:21 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/10/27 4:06:49 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/27 7:21:53 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/10/26 12:00:21 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/10/27 6:20:47 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/10/27 4:06:50 阅读更多 →

日新闻

周新闻

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/26 12:00:19 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/27 7:21:50 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/26 8:34:37 阅读更多 →