Lark CLI 官方版从零搭建指南:MD 自动发布到飞书/Lark 在线文档
前往 Node.js 官网下载 LTS 版本: 下载 Windows Installer( ),双击安装,一路默认即可。 打开 CMD 或 PowerShell,执行: 两个都能输出版本号就算成功 ✅ 这个命令会自动完成: 看到版本号输出即
目标:在一台全新电脑上,使用飞书官方 CLI 工具(
@larksuite/cli),实现将本地 Markdown 文件自动发布为飞书/Lark 在线文档,并转移文档所有权给开发者本人。适用系统:Windows 10/11
预计耗时:15~20 分钟(官方工具大幅简化了流程)
工具来源:字节跳动/飞书官方团队维护,MIT 开源协议
与第三方 feishu-cli 的区别
| 维度 | riba2534/feishu-cli(第三方) | @larksuite/cli(官方) |
|---|---|---|
| 维护方 | 社区开发者 | 飞书/Lark 官方团队 |
| 安装方式 | 下载 exe + 手动配 PATH | npx @larksuite/cli@latest install 一行搞定 |
| 应用创建 | 手动去开放平台创建 | lark-cli config init 交互式一键创建 |
| 配置文件 | 手动编辑 config.yaml | 交互式引导自动生成 |
| 登录认证 | 手动指定 scope | --recommend 自动选择常用权限 |
| 业务覆盖 | 主要文档操作 | 18 大业务域、200+ 命令 |
| AI Agent | 基础支持 | 26 个内置 AI Agent Skill |
| 飞书/Lark | 改 base_url 切换 | 自动识别,无需手动切换 |
| 命令风格 | feishu-cli doc import |
三层架构(Shortcuts / API / Raw) |
全局流程概览
flowchart TD
A[1. 安装 Node.js] --> B[2. 安装 Lark CLI]
B --> C[3. 初始化应用配置]
C --> D[4. OAuth 登录认证]
D --> E[5. 导入 MD 到飞书/Lark]
E --> F[6. 转移文档所有权]
F --> G(完成)
style A fill:#FF9800,color:#fff
style B fill:#4CAF50,color:#fff
style G fill:#2196F3,color:#fff
💡 对比旧版教程少了 5 个步骤(手动创建应用、手动配权限、手动配重定向 URL、发布应用、手写 config.yaml),官方 CLI 全自动化了。
第一步:安装 Node.js(前置条件)
@larksuite/cli是 npm 包,必须先有 Node.js 环境。
1.1 下载安装 Node.js
前往 Node.js 官网下载 LTS 版本:
下载地址:https://nodejs.org/
下载 Windows Installer(.msi),双击安装,一路默认即可。
1.2 验证安装
打开 CMD 或 PowerShell,执行:
node --version
npm --version
两个都能输出版本号就算成功 ✅
💡 推荐 Node.js v18+,实测 v16 及以下可能有兼容问题。
第二步:安装 Lark CLI
2.1 一行命令安装
npx @larksuite/cli@latest install
这个命令会自动完成:
- 下载最新版
lark-cli二进制文件 - 安装到全局 PATH
- 安装必要的 CLI Skills
⚠️ 如果 npm 配置了
ignore-scripts true,会导致安装失败。请确认没有这个配置:
npm config get ignore-scripts
# 应该返回 false 或 undefined
2.2 验证安装
lark-cli --version
看到版本号输出即安装成功 ✅
💡 如果提示
lark-cli 不是可识别的命令,重启终端窗口试试。npm 全局安装后 PATH 生效需要重开终端。
第三步:初始化应用配置
🎉 这一步替代了旧版教程的第 2~6 步! 官方 CLI 支持一键创建飞书应用并自动配置,不需要手动去开放平台操作。
方式一:一键创建新应用(推荐)
lark-cli config init --new
执行后会自动打开浏览器,引导你:
- 登录飞书/Lark 开放平台
- 一键创建应用(自动命名为 lark-cli 相关名称)
- 自动开通所需权限
- 自动配置重定向 URL
- 自动发布应用
浏览器中完成操作后,终端会显示配置成功 ✅
方式二:使用已有应用
如果你已经在开放平台创建过应用,可以直接填入凭证:
lark-cli config init
按交互式提示输入:
- App ID(以
cli_开头) - App Secret
3.3 确认配置生效
lark-cli auth status
如果返回配置相关信息(即使显示未登录),说明配置已生效 ✅
(参考)手动在开放平台创建应用
如果 config init --new 不可用或遇到问题,可以手动操作:
- 打开浏览器访问:
- 点击 "Create App" → "Build an App" → "Self-built app"
- 填写应用名称和描述
- 在 "Credentials" 页面记录 App ID 和 App Secret
- 在 "Permissions & Scopes" 中开通以下权限:
必需权限清单
| 权限标识 | 权限说明 |
|---|---|
docx:document |
查看、编辑文档 |
docx:document:readonly |
获取文档内容 |
drive:drive |
管理云空间文件 |
drive:drive:readonly |
查看云空间文件 |
drive:drive:upload |
上传文件 |
drive:file:download |
下载文件 |
drive:file:upload |
上传所有文件 |
docs:permission.member:create |
添加协作者 |
docs:permission.member:readonly |
查看协作者 |
docs:permission.member:delete |
删除协作者 |
docs:permission.setting:write |
更新公开权限 |
contact:user.base:readonly |
获取用户基本信息 |
auth:user.id:read |
获取用户身份信息 |
可选权限
| 权限标识 | 权限说明 |
|---|---|
search:docs:read |
搜索云文档 |
wiki:wiki:readonly |
查看知识库 |
wiki:wiki |
管理知识库 |
board:board |
查看和管理画板 |
- 在 "Security Settings" 中添加重定向 URL:
http://127.0.0.1:9768/callback - 在 "Version Management" 中创建版本并发布应用
- 然后执行
lark-cli config init,按提示输入 App ID 和 App Secret
第四步:OAuth 登录认证
4.1 执行登录
lark-cli auth login --recommend
--recommend会自动选择常用的权限范围(scopes),不需要手动指定。
4.2 浏览器授权
命令执行后会自动打开浏览器:
- 在飞书/Lark 授权页面点击 "同意授权" / "Allow"
- 浏览器会跳转到回调页面(可能显示"无法访问此网站",这是正常的)
- CLI 会自动捕获回调并完成认证
4.3 确认登录成功
lark-cli auth status
返回类似以下内容即成功 ✅:
{
"logged_in": true,
"access_token_valid": true,
"refresh_token_valid": true
}
4.4 (备选)Device Flow 登录
如果自动打开浏览器不成功,可以使用 Device Flow:
# 生成授权链接(不阻塞终端)
lark-cli auth login --recommend --no-wait
命令会输出一个授权 URL 和 Device Code,把 URL 复制到浏览器完成授权后:
# 用 Device Code 完成登录
lark-cli auth login --device-code <DEVICE_CODE>
4.5 其他认证命令
# 查看所有已认证用户
lark-cli auth list
# 检查某个 scope 是否已授权
lark-cli auth check --scope "docx:document"
# 列出应用所有可用 scope
lark-cli auth scopes
# 登出
lark-cli auth logout
第五步:导入 MD 文件到飞书/Lark
Lark CLI 提供两种方式创建文档,按需选择。
方式一:快捷命令(Shortcuts)—— 推荐
直接用 Markdown 内容创建飞书在线文档:
lark-cli docs +create --api-version v2 --doc-format markdown --content "$(cat 'C:\Users\你的用户名\Desktop\技术方案.md')"
或者用 PowerShell 读取文件内容:
$content = Get-Content "C:\Users\你的用户名\Desktop\技术方案.md" -Raw
lark-cli docs +create --api-version v2 --doc-format markdown --content $content
参数说明:
| 参数 | 说明 |
|---|---|
--api-version v2 |
使用文档 API v2 |
--doc-format markdown |
内容格式为 Markdown |
--content |
文档内容(Markdown 格式) |
方式二:Markdown 原生命令
创建 Drive 原生的 .md 文件:
lark-cli markdown create --file "C:\Users\你的用户名\Desktop\技术方案.md"
💡 两种方式的区别:
docs +create:创建飞书在线文档(docx),支持更丰富的格式(表格、画板等)markdown create:创建 Drive 原生 Markdown 文件(.md),保持原始格式
5.3 记录文档 ID
创建成功后会返回文档信息,记录下文档 ID(一串字母数字),下一步要用。
💡 可以用
--format pretty获得更易读的输出:
lark-cli docs +create --api-version v2 --doc-format markdown --content "..." --format pretty
第六步:转移文档所有权
⚠️ 为什么需要这一步? 通过 API 创建的文档,所有者是应用(机器人),不是你本人。直接打开会提示"无权限"。必须转移所有权。
6.1 添加协作者权限
lark-cli drive +permission-add \
--token "文档ID" \
--type docx \
--member-type email \
--member-id "你的飞书邮箱@公司域名.com" \
--perm full_access
6.2 转移所有权
lark-cli drive +permission-transfer \
--token "文档ID" \
--type docx \
--member-type email \
--member-id "你的飞书邮箱@公司域名.com"
6.3 验证
打开文档链接,确认能正常编辑 ✅
💡 可以用以下命令查看文档协作者列表:
lark-cli drive +permission-list --token "文档ID" --type docx
🎯 一键脚本(日常使用)
PowerShell 版本(Windows 原生)
# lark-publish.ps1 - 一键发布 MD 到飞书/Lark 文档
# 用法: .\lark-publish.ps1 -MdFile "C:\path\to\file.md" -Title "标题" -Email "your@email.com"
param(
[Parameter(Mandatory=$true)]
[string]$MdFile,
[Parameter(Mandatory=$false)]
[string]$Title = "",
[Parameter(Mandatory=$true)]
[string]$Email
)
# 读取 MD 文件内容
if (-not (Test-Path $MdFile)) {
Write-Host "❌ 文件不存在: $MdFile" -ForegroundColor Red
exit 1
}
$content = Get-Content $MdFile -Raw -Encoding UTF8
# 如果指定了标题,在内容前插入一级标题
if ($Title) {
$content = "# $Title`n`n$content"
}
Write-Host "📄 正在发布: $MdFile" -ForegroundColor Cyan
# 创建飞书文档
$result = lark-cli docs +create --api-version v2 --doc-format markdown --content $content --format json 2>&1
Write-Host $result
# 提取文档 ID
if ($result -match '"document_id"\s*:\s*"([A-Za-z0-9]+)"') {
$docId = $matches[1]
} elseif ($result -match '"obj_token"\s*:\s*"([A-Za-z0-9]+)"') {
$docId = $matches[1]
} elseif ($result -match '([A-Za-z0-9]{20,})') {
$docId = $matches[1]
} else {
Write-Host "❌ 创建失败,无法获取文档 ID" -ForegroundColor Red
exit 1
}
Write-Host "📝 文档 ID: $docId" -ForegroundColor Green
# 添加完全访问权限
Write-Host "🔐 正在添加权限..." -ForegroundColor Cyan
lark-cli drive +permission-add --token $docId --type docx --member-type email --member-id $Email --perm full_access
# 转移所有权
Write-Host "🔄 正在转移所有权..." -ForegroundColor Cyan
lark-cli drive +permission-transfer --token $docId --type docx --member-type email --member-id $Email
Write-Host ""
Write-Host "✅ 发布完成!" -ForegroundColor Green
Write-Host "📎 文档链接: https://feishu.cn/docx/$docId" -ForegroundColor Yellow
Bash 版本(Git Bash / WSL)
#!/bin/bash
# lark-publish.sh - 一键发布 MD 到飞书/Lark 文档
# 用法: ./lark-publish.sh <md文件路径> [文档标题] <你的邮箱>
MD_FILE="$1"
TITLE="$2"
EMAIL="$3"
if [ -z "$MD_FILE" ] || [ -z "$EMAIL" ]; then
echo "Usage: ./lark-publish.sh <md_file> [title] <email>"
exit 1
fi
# 读取 MD 文件
if [ ! -f "$MD_FILE" ]; then
echo "❌ 文件不存在: $MD_FILE"
exit 1
fi
CONTENT=$(cat "$MD_FILE")
# 如果指定了标题,在内容前插入
if [ -n "$TITLE" ]; then
CONTENT="# $TITLE\n\n$CONTENT"
fi
echo "📄 正在发布: $MD_FILE"
# 创建飞书文档
RESULT=$(lark-cli docs +create --api-version v2 --doc-format markdown --content "$CONTENT" --format json 2>&1)
echo "$RESULT"
# 提取文档 ID
DOC_ID=$(echo "$RESULT" | grep -oP '"document_id"\s*:\s*"\K[A-Za-z0-9]+' || echo "$RESULT" | grep -oE '[A-Za-z0-9]{20,}' | head -1)
if [ -z "$DOC_ID" ]; then
echo "❌ 创建失败,无法获取文档 ID"
exit 1
fi
echo "📝 文档 ID: $DOC_ID"
# 添加完全访问权限
echo "🔐 正在添加权限..."
lark-cli drive +permission-add --token "$DOC_ID" --type docx --member-type email --member-id "$EMAIL" --perm full_access
# 转移所有权
echo "🔄 正在转移所有权..."
lark-cli drive +permission-transfer --token "$DOC_ID" --type docx --member-type email --member-id "$EMAIL"
echo ""
echo "✅ 发布完成!"
echo "📎 文档链接: https://feishu.cn/docx/$DOC_ID"
使用方法:
# PowerShell
.\lark-publish.ps1 -MdFile "C:\Users\msn\Desktop\技术方案.md" -Title "技术方案" -Email "wangkunlun@poolking-tech.com"
# Bash
chmod +x lark-publish.sh
./lark-publish.sh "C:/Users/msn/Desktop/技术方案.md" "技术方案" "wangkunlun@poolking-tech.com"
支持的 Markdown 特性
Lark CLI 通过飞书文档 API v2 创建文档,支持标准 Markdown 语法:
| 语法 | 说明 | 示例 |
|---|---|---|
| 标题 | # ~ ###### |
# 一级标题 |
| 段落/文本 | 普通文本 | 直接写 |
| 粗体 | **文本** |
粗体 |
| 斜体 | *文本* |
斜体 |
| 删除线 | ~~文本~~ |
|
| 行内代码 | `代码` |
code |
| 链接 | [文字](URL) |
链接 |
| 无序列表 | - 项目 |
嵌套用缩进 |
| 有序列表 | 1. 项目 |
支持嵌套 |
| 任务列表 | - [ ] / - [x] |
待办/已完成 |
| 代码块 | ```语言 |
带语法高亮 |
| 表格 | ` | 表头 |
| 图片 |  |
支持 |
| 引用 | > 文本 |
支持嵌套 |
| 分割线 | --- |
水平线 |
⚠️ 注意:
docs +create --doc-format markdown使用飞书内置的 Markdown 导入引擎。如果需要 Mermaid 图表转画板、PlantUML 等高级转换功能,建议使用第三方riba2534/feishu-cli的doc import命令,它在 Markdown ↔ 飞书文档双向转换方面做了更深入的适配。
Lark CLI 三层命令架构
Lark CLI 的命令设计分三层,按需选择粒度:
flowchart LR
A["快捷命令(Shortcuts)<br>+create / +agenda<br>人机友好,智能默认值"] --> B["API 命令<br>calendar.events.list<br>与平台端点一一对应"]
B --> C["Raw API 调用<br>api GET /open-apis/...<br>覆盖 2500+ API"]
style A fill:#4CAF50,color:#fff
style B fill:#2196F3,color:#fff
style C fill:#9C27B0,color:#fff
1. 快捷命令(Shortcuts)
以 + 为前缀,最常用,智能默认值:
# 创建文档
lark-cli docs +create --api-version v2 --doc-format markdown --content '# Hello World'
# 查看今日日程
lark-cli calendar +agenda
# 发送消息
lark-cli im +messages-send --chat-id "oc_xxx" --text "Hello"
2. API 命令
与飞书开放平台端点一一对应,100+ 精选命令:
# 列出日历
lark-cli calendar calendars list
# 查看日程
lark-cli calendar events instance_view --params '{"calendar_id":"primary"}'
3. Raw API 调用
直接调用任意飞书 API,覆盖 2500+ 端点:
# GET 请求
lark-cli api GET /open-apis/calendar/v4/calendars
# POST 请求
lark-cli api POST /open-apis/im/v1/messages \
--params '{"receive_id_type":"chat_id"}' \
--data '{"receive_id":"oc_xxx","msg_type":"text","content":"{\"text\":\"Hello\"}"}'
进阶技巧
输出格式
--format json # 完整 JSON 响应(默认)
--format pretty # 人性化格式输出
--format table # 易读表格
--format ndjson # 换行分隔 JSON(适合管道处理)
--format csv # 逗号分隔值
分页控制
--page-all # 自动翻页获取所有数据
--page-limit 5 # 最多获取 5 页
--page-delay 500 # 每页请求间隔 500ms
Dry Run(预览不执行)
lark-cli im +messages-send --chat-id oc_xxx --text "hello" --dry-run
Schema 自省(查看 API 参数结构)
# 查看所有可用 API
lark-cli schema
# 查看某个 API 的参数详情
lark-cli schema docs.document.create
身份切换
# 以用户身份执行
lark-cli calendar +agenda --as user
# 以机器人身份执行
lark-cli im +messages-send --as bot --chat-id "oc_xxx" --text "Hello"
常见问题排障
| 问题 | 原因 | 解决方案 |
|---|---|---|
npx: command not found |
未安装 Node.js | 回到第一步安装 Node.js |
lark-cli: command not found |
安装后未重开终端 | 关闭终端重新打开 |
npm install fails with ignore-scripts |
npm 配置了 ignore-scripts true |
执行 npm config set ignore-scripts false |
认证失败 / Token 过期 |
未登录或 Token 已失效 | 执行 lark-cli auth login --recommend 重新认证 |
Permission denied |
应用权限未开通 | 执行 lark-cli config init --new 重新配置,或手动去开放平台开通权限 |
文档创建成功但无法访问 |
未转移所有权 | 执行第六步的权限添加和所有权转移 |
App not published |
应用未发布 | 执行 lark-cli config init --new 或手动去开放平台发布 |
Scope xxx not granted |
登录时未授权该权限 | 执行 lark-cli auth login --scope "xxx" 补充授权 |
config init --new 浏览器没打开 |
浏览器关联问题 | 手动复制终端输出的 URL 到浏览器 |
docs +create 报错 |
登录身份或权限不足 | 确认已用 auth login --recommend 登录 |
| 飞书/Lark 切换问题 | config 中域名不对 | 删除配置重新执行 lark-cli config init,选择正确的平台 |
文件结构总览
搭建完成后,CLI 相关文件存放在用户主目录:
flowchart LR
subgraph local[本地电脑]
A[Markdown 文件] --> B[lark-cli]
C["~/.lark-cli/<br>config + token"] --> B
end
B -->|"docs +create"| D[飞书/Lark 云文档]
B -->|"drive +permission"| E[权限管理 + 所有权转移]
快速命令速查表
# ========== 安装 & 配置 ==========
# 安装 CLI
npx @larksuite/cli@latest install
# 检查版本
lark-cli --version
# 初始化配置(一键创建应用)
lark-cli config init --new
# 使用已有应用配置
lark-cli config init
# ========== 认证 ==========
# 登录(推荐)
lark-cli auth login --recommend
# 查看登录状态
lark-cli auth status
# 查看所有已认证用户
lark-cli auth list
# 列出可用 scope
lark-cli auth scopes
# 登出
lark-cli auth logout
# ========== 文档操作 ==========
# 创建文档(Markdown 内容)
lark-cli docs +create --api-version v2 --doc-format markdown --content "# 标题"
# 创建原生 Markdown 文件
lark-cli markdown create --file "文件.md"
# ========== 权限管理 ==========
# 添加协作者
lark-cli drive +permission-add --token "文档ID" --type docx --member-type email --member-id "邮箱" --perm full_access
# 转移所有权
lark-cli drive +permission-transfer --token "文档ID" --type docx --member-type email --member-id "邮箱"
# 查看协作者
lark-cli drive +permission-list --token "文档ID" --type docx
# ========== 工具 ==========
# 查看 API Schema
lark-cli schema
# Dry Run 预览
lark-cli docs +create --doc-format markdown --content "test" --dry-run
# 查看帮助
lark-cli --help
lark-cli docs --help
lark-cli drive --help
📌 飞书版 ↔ Lark 版切换
官方 CLI 同时支持飞书和 Lark,在 config init 时会自动识别你要用哪个平台:
# 重新配置,选择另一个平台
lark-cli config init
按交互式提示选择飞书或 Lark,然后重新登录即可。
⚠️ 切换后之前的 Token 会失效,需要重新执行
lark-cli auth login --recommend。