Node.js 中使用 anydoc - @firecrawl/anydoc 教程
API 参考Node.js
anydoc 的 Node.js 绑定叫 @firecrawl/anydoc,原生实现跑在 libuv 线程池里,不阻塞事件循环——在高并发服务里批量转文档也不会卡住主线程。
安装
npm install @firecrawl/anydoc包内置 TypeScript 类型,装完即用。
三个核心 API
import { toMarkdown, toMarkdownBytes, toDocument } from '@firecrawl/anydoc'
// 1. 从路径转(最常用)
const markdown = await toMarkdown('report.docx')
console.log(markdown)
// 2. 从字节转(适合文件已在内存的场景)
const buf = await fs.readFile('slides.pptx')
const md = await toMarkdownBytes(buf)
// 3. 停在文档模型(保留嵌入资源)
const doc = await toDocument(buf)
// doc 上可访问图片/嵌入对象的原始字节与媒体类型错误处理
try {
await toMarkdown('scanned.pdf')
}
catch (e) {
console.error(e.code) // 'Unsupported' | 'Malformed' | 'Encrypted' | 'ResourceLimit' | 'MissingPart' | 'Io'
}所有错误统一通过 error.code 暴露,映射关系见错误处理与限制。
常见场景
批量转换目录
import { readdir } from 'node:fs/promises'
import { toMarkdown } from '@firecrawl/anydoc'
const dir = './docs'
for (const name of await readdir(dir)) {
if (/\.(docx|pptx|xlsx|pdf)$/i.test(name)) {
const md = await toMarkdown(`${dir}/${name}`)
await writeFile(`${dir}/${name}.md`, md)
}
}网页上传即转
// 收到上传的 File 对象后直接转字节
const bytes = await file.arrayBuffer()
const markdown = await toMarkdownBytes(new Uint8Array(bytes))
// 回给前端或继续喂给 LLM 都行喂给 AI Agent
把 toMarkdown 包装成一个工具函数暴露给 LLM 工具调用,Agent 就能"读懂"任意上传的办公文档:
const convertDoc = async (path) => await toMarkdown(path)
// 注册为 tool → Agent 直接调用小提示
- 转换是同步阻塞式的(线程池里),没有 Promise 版本以外的异步 API;并发场景交给线程池即可
- 想输出到文件:
fs.writeFile('out.md', markdown),CLI 的-o就是干这个的 - 版本升级留意 CHANGELOG,错误码命名可能调整