@bettercms-ai/cli

中文文档
0.16.2发布于 2026/11/02ES Module近 30 天下载 4426

在本地进行一个BetterCMS项目:签名,复制源,安装依赖.

中文使用文档
文档目录9 节
  1. 图标
  2. 环境
  3. init
  4. 读取密钥
  5. 无头项目
  6. status
  7. deploy
  8. 退出代码
  9. 解决问题

@ bettercms-ai/ cli (英语)

在你自己的机器上做一个BetterCMS项目.

npx @bettercms-ai/cli@latest init --project-id <id>

复制命令( 上面有您的工程的 ID ) 这个项目的工作 当地 按钮。 要求节点20或更新.

图标

命令它会做什么
init --project-id <id> [--agent <name>] [--repo <folder|GitHub URL>] [--dir <path>|.] [--framework <name>] [--no-launch] [--no-sections] [--push|--no-push] [--authoring <components|fields>] [--forms-email <address>]将您签入, 获取源( 或者在无头项目上, 使用您的前端或从启动器启动), 安装依赖性, 预填 .env,安装代理技能,包装每个页面的段落,以便遵循 CMS 命令(不是在无头上),在工程上打开你的编码代理.
status [--project-id <id>] [--json] [--gate]什么是活的,什么是建设,以及设置是否完成. 缓存登录的默认值 .
pull-content [--dir <path>]无头:一个被改造的站点的第一个建设步骤(bettercms pull-content && <build>) (中文(简体) ). 将已发布的内容写入页面即刻显示其代码导入,因此重建显示已发布的内容. 没有钥匙.
derive [--project-id <id>] [--dir <path>] [--no-build] [--json]无头:在这里建立和运行你的前端,让每个页面都作为访客看到它,然后将页面发送到BetterCMS,它产生它们的字段和今天的拷贝. 你的密码永远不变.
deploy --to <vercel|netlify|cloudflare> [--name <site>] [--dir <out>] [--no-hook] [--json]将这个寄存器通过主机自己的CLI和浏览器的登录设置在自己的主机上,在那里设置站点的BetterCMS地址,并注册主机的部署钩,这样每个发布者都会重建.
env push [--project-id <id>] [--all]设置此寄存器的工程变量 .env 文档。 打印名称, 永远不值 .
bridge [--project <id>] [--once]将这台机器作为执行器保存在仪表板上.
whoami缓存的签入——项目,工作空间,API,令牌过期. 离线.
logout忘记了缓存的登录。 同上,注:.
--version 编号 : --help已安装的版本 / 此用法 .
旗帜默认这是什么
--project-id <id>init: 需要 status: 缓存的签名拟进行的项目.
--dir <path>项目弹片目录 init 创造。 一定已经不存在了.
--api <rung|url>prod一个叫"一跑"的人 prod, (中文(简体) ), dev, (中文(简体) ), local - 或者一个完整的URL. 还有 BETTERCMS_API_URL。 。 。 .
--json关status 仅:逐字打印API响应.
--agent安装的,其他要求init 仅限: claude, (中文(简体) ), codex, (中文(简体) ), opencode, (中文(简体) ), cursor 或者说 gemini (单位:千美元) BETTERCMS_AGENT; 记住 ~/.bettercms/cli-prefs.json。 。 。 .
--framework项目,其他的问init 仅仅,没有前端的无头:启动器(next, (中文(简体) ), astro, (中文(简体) ), react-ts) (中文(简体) ).
--no-launch关init 仅:打印下一个步骤,而不是打开编码代理.
--no-sections关init 只:离开页面文件(skip step 7).
--repo连接的仓库init 仅: 使用此文件夹或 GitHub URL 作为站点代码 .
--push 编号 : --no-push请求init 仅仅: 推动BetterCMS的设置 承诺随它去(--no-push:从来没有.
--authoring请求init 仅:编辑器如何构建页面, components 或者说 fields。 。 。 .
--forms-email请求init 仅:当网站表格发送提交材料时("" 保持网站自己的处理.
--gate关status 仅:打印设置出闸(每检查总和,最差的五页,下个修补),出站出站出站出站出站出站出站出站出站不全.

两者 --flag value 财务报告和审定财务报表 --flag=value 工作时 未知旗帜被拒绝,没有被忽略.

环境

--api 取一个名字,所以没有人会记得一个主机名:

名称API 密码
prod (默认)https://api.bettercms.ai
devhttps://dev-api.bettercms.ai
localhttp://localhost:3000
npx @bettercms-ai/cli@latest init --project-id <id> --api dev

满 https:// URL仍然有效. 命令上拒绝一个不是粗话的空话 线条,列出哪些是——它从未作为主机名发送给DNS.

Dev API 开机了 bettercms.ai 而其余的德瓦庄园则在 bettercms.dev (磁盘) app.bettercms.dev, MCP 软件 mcp.bettercms.dev) (中文(简体) ). bettercms.dev 拥有通配符 DNS 记录,所以 dev-api.bettercms.dev 解析并回答 nginx 404 。 使用 --api dev 编辑 没有问题出现.

每个rung缓存在它自己的来源下输入 ~/.bettercms/cli-credentials.json,所以切换从来不给另一个 rung 的标志 - 但第一个反对新来的指令要求你批准.

签名是 全球, 而不是每个目录数字 : init 或者说 status 为另一个项目替换 缓存的赠款,所以没有 status 之后报告其他项目. status 打印 完全出于这个原因,在第一条线上的项目编号.

init

  1. 让你加入. OAuth 设备代码随工程同时打开您的浏览器 预选。 批准它在那里。 如果浏览器无法打开,则会打印链接。 补助金 缓存于 ~/.bettercms/cli-credentials.json,所以下一次运行是沉默的——除非 缓存赠款是用于不同的项目,在这种情况下,再次向您询问.
  2. 读取工程 ——它的 swit(目录名称)和工作空间.
  3. 取出出处. 连接的 GitHub Repo 被复制 git clone -没有GitHub 登录: BetterCMS 将克隆人自己的读取权限借给该寄存器(一个小时,从未) 写在克隆人身上),而git从不提示. 如果克隆仍然不能工作,或者没有 连接回波,最新部署的构建被下载并解开.
  4. 安装依赖关系 使用软件包管理器的锁文件名称 - bun.lock编号 : bun.lockb 包子 包子 包子, pnpm-lock.yaml →, yarn.lock 纱线,否则npm。 一个项目 没有 package.json 跳过此步骤。 如果安装失败, init 用命令警告 重新在目录内运行并继续进行; 停止会留下一个封存重运行的文件夹 .
  5. 预填 .env 从 .env.example 当有一个和没有 .env 然而: BETTERCMS_API_URL 编号 : PUBLIC_BCMS_API_URL 编号 : BCMS_API_URL 设置为 API,以及 BETTERCMS_WORKSPACE 编号 : PUBLIC_BCMS_WORKSPACE 编号 : BCMS_WORKSPACE 给工作空间的子弹. 所有其它的一行——包括你的钥匙——都和原来一样.
  6. 设置您的编码代理一样 npm create sanity: 运行 npx -y @bettercms-ai/install@latest --global --mcp --api <rung>在终端里,它问 "为这些编辑配置BetterCMS MCP和代理技能?" (Claude Code, Codex CLI, Cursor, ), VS代码,Zed;没有它就使用它找到的编辑器. 每个被选中的编辑器都会得到BetterCMS 技能(全部24: bettercms, (中文(简体) ), bettercms-migrate 财务报告和审定财务报表 bettercms-abm,加上 单独 bettercms-* 和主机MCP的用户级配置。 一个API,即 命名为 rung 或 https 都不可能只获得这些技能 。 失败只能用命令警告.
  7. 环绕每页的章节 因此网站的自建使得它们按照CMS页面的顺序排列 列出它们,并按各节的间隔和样式,并绘制编辑器中添加的一节: npx -y @bettercms-ai/convert@latest --sections,带有来自API的项目页面列表. 它运行是否安装了代理 。 先是干盘,其计划被印出: 每页, 每一节和它得到的插槽 每一页都有它单独留下的原因 一样 运行为真,然后检查是否没有类或样式符号与 HEAD,然后是一个当地 执行它写的文件: chore(bettercms): render sections from BetterCMS。 。 。 . 它从不推永远不修补 留下你独创的一切 如果一个文件 如果样式检查或一个 SDK安装失败, 它把文件放回去 。 一个不是 git 仓库的目录被包裹 而不执着。 包装只添加 <BcmsSections> 和每个部分的一个插槽标记 : 任何部分的标记,道具,阶级或风格都会改变,第二跑则不会改变任何东西. 何时 存储器 @bettercms-ai SDK 上一个日期 <BcmsSections>,其范围在 package.json 并且软件包管理器安装它(修改是在同一承诺中)。 什麽 上面有BetterCMS的录音 所以安装门知道哪些路线被包裹了 被拒绝. --no-sections 跳过台阶.
  8. 在项目上打开 Claude 代码,连接到BetterCMS,并且已经发送了第一个提示.. 和以前一样,现在为您输入。 需求 claude 在你身边 PATH (单位:千美元)npm install -g @anthropic-ai/claude-code;没有它,或者没有终端,或者与 --no-launch, (中文(简体) ), init 打印下一步和要运行的命令。 重运行 init 在同一目录中重新使用现有的检查并重新打开 Claude 代码而不是 无法使用“ 已经存在 ” 。 设定 BETTERCMS_AGENT_MODEL 以命名 Claude 代码模型 使用; 未设置, 这是您自己的默认值 .
  9. 读取设置的门并打印出来 当代理退出,不管它退出,在一个屏幕上 无论网站大小如何:网页已建立、创建和出版;每行计算1行 检查(文本、图像、链接、区域、样式、SVG、数字、属性文本),每个 editable/total· ; 5个最差的路线,除注解外的每一个记录; 用于修复关闭大多数项目(Next); 剩下的前五个项目,每个项目都有工具 调用它; 下面的两个命令。 检查尚未计量( 项目) 在该检查存在之前设置的指纹) UNMEASURED 替换份额,以及 Unmeasured 线条命名它们:既不是失败也不是通过,再有一个设置运行它们。 虽然 门不完整 init 退出 3 并打印在同一位置重新打开代理的命令 网站。 之后 --no-launch,或没有终点站,大门被打印出来 init 仍为退出 0:只要求它取出网站. 无法读取的门( 更古老的 API, 网络) 以一行表示,不是失败.
Setup     incomplete: 23 items left
Pages     18 built, 18 created, 16 published
Text      41210/52008 (79%) characters editable
Images    36/61 (59%) editable
Links     402/410 (98%) editable
Sections  52/61 (85%) stamped and movable
Style     UNMEASURED: setup has not counted this on the live build
SVGs      20/44 (45%) editable
Numbers   12/12 (100%) editable
Attrs     70/96 (72%) editable (alt, aria-label, title, placeholder)
Open      text 7, svg 6, style 4, image 3, published 2, seo 1
Unmeasured style: not a failure and not a pass. Setup measures them (editor_setup { force: true })
Routes    7 of 18 pass (page, text, images, links, sections, style; worst first)
  /services      draft      text 310/2400     images 0/4      links 12/12    sections 1/9    style ?      fails: published, text, image, sections
  /blog/post-1   published  text 900/2400     images 2/4      links 12/12    sections 3/3    style ?      svg 0/3  fails: text, image, svg
  …
  … and 13 more
Next      bind-elements closes 16 of 23: get_conversion_brief {"complete":true}

Left to do:
  1. 12% of the visible text on /services is a field's (310 of 2400 characters; the bar is 98%).
     fix (bind-elements): get_conversion_brief {"complete":true}
  2. 1 of 9 sections on /services are a stamped root the editor can find: the rest are not drawn from the page's blocks.
     fix (run-sections-conversion): componentize_sections {"codemod":true,"digest":"<digest from get_componentize_plan>"}
  …
  … and 18 more

Resume the agent:  npx @bettercms-ai/cli@latest init --project-id proj_abc123
Read this again:   npx @bettercms-ai/cli@latest status --gate --project-id proj_abc123

读取密钥

init 不刻薄 API 密钥: 一个小时的登录不能留下一个永远不会过期的密钥. 发布的内容不需要( SDK 读取自 BCMS_PROJECT_ID) (中文(简体) ). 当前端 配置读取一个,编码代理器用 create_delivery_key 工具,一个命名, 仅读密钥列表于 工程 – 设置 – API 密钥,并写入 .env。 。 。 .

无头项目

一个无头项目的网站 由它自己的主机建造,所以 init 不需要部署源:它使用 你的头端。 在文件夹中运行( 或者通过) --repo <folder|GitHub URL>) (中文(简体) ). 开始运行 bettercms derive:它建立网站,运行网站,让每个页面都像访客一样看到它(在您所看到的 本地 Chrome, Chromium 或 Edge, 所以复制一个在浏览器中获取的组件也会读取)并发送 这些页面到BetterCMS, 它的页面,字段和今天的拷贝 从它们,就像它 从它建立的地方。 然后代理转换原地的代码: 每字变为读取 它的地盘, 标记不变。 它部署与 bettercms deploy --to <host>,记录 站点 URL (set_front_end),运行 derive 同样的,布置量度 所运送的,只停止 何时 get_next_steps 报告 receipt.complete (数量) receipt.frontEnd 以行及其出门.

npx @bettercms-ai/cli@latest derive            # in the front end's folder
BETTERCMS_BROWSER=none npx @bettercms-ai/cli@latest derive   # read the HTML as served

init 永远不要从开始 除非你要求一个: --framework <next|astro|react-ts>,或 "启动器"在它的问题, 对于一个完全没有前端的项目.

status

$ bettercms status
Project   proj_abc123
State     idle
Live      a1b2c3d since 2026-01-01T00:00:00.000Z
Serving   staging — promote pending (production a1b2c3d)
Editor    https://bettercms.ai/acme/projects/acme-site/visual

Serving 仅出现在使用中/生产分拆的项目. Live 读取 nothing deployed yet 直到第一次出版,和 State 包含API本身的理由,当 构建失败 : State failed — <reason>。 。 。 .

--json 逐字打印 API 回复 - state, (中文(简体) ), lastLiveSha, (中文(简体) ), liveAt, (中文(简体) ), publishing, (中文(简体) ), failed, (中文(简体) ), error, (中文(简体) ), slot, (中文(简体) ), productionSha, (中文(简体) ), awaitingPromote, (中文(简体) ), canvas, (中文(简体) ), editorUrl这是 (单位:千美元) 非交互式:如果签名需要浏览器,则退出 1 Sign-in needed for <id>. Run the command once without --json to approve it. 而不是说 打开一个。 运行 status 一次没有 --json 在新机器上,然后写下来.

status 需要同样的 artifact:write 作为部署的赠款,默认设备给予的 携带。 一个收缩的角色看到API自己的403句而不是状态行.

A 类 Setup 当 API 报告设置闸口时, 直行如下 : complete, (中文(简体) ), not judged (没什么 活的,或项目是无头的),或 incomplete: N items left。 。 。 . status --gate 打印 整个大门,作为 init 当代理退出时执行, 当它不完整时则退出 3, 所以一个脚本 等会再说吧. --json --gate 将门加到JSON上作为 setupGate。 。 。 .

deploy

$ bettercms deploy --to vercel
Host      Vercel (acme-site)
URL       https://acme-site-a1b2c3.vercel.app
Env       BCMS_API_URL, BCMS_WORKSPACE, BCMS_PROJECT_ID, PUBLIC_BCMS_API_URL, …
Rebuilds  on every publish (deploy hook registered with BetterCMS)

Sanity模式:东道主自己的CLI(vercel, (中文(简体) ), netlify, (中文(简体) ), wrangler运行 npx() 标志 中,创建或链接网站并部署此目录。 你们的主人 符号留在CLI的自有店里;BetterCMS从不看到. 礛 deploy数字 :

  1. 在主机上设置网站的 BetterCMS 地址—— BCMS_API_URL, (中文(简体) ), BCMS_WORKSPACE, (中文(简体) ), BCMS_PROJECT_ID,无前缀并在您框架的公用前缀下(NEXT_PUBLIC_, (中文(简体) ), PUBLIC_, (中文(简体) ), VITE_(中文(简体) ). 发布的内容不需要密钥,所以没有设置任何秘密;
  2. 在BetterCMS上注册主机的部署钩,所以每个发布者都会重建网站.
东道主站点在发布后重建
维塞尔vercel link (创建项目), vercel git connect一旦项目从您的 GitHub 仓库中建立起来 .
净化netlify init 在终端中(创建网站并连接仓库); netlify sites:create 没有一旦网站从你的仓库里建立起来.
云雾花本地建筑,然后 wrangler deploy --assets <dir>: 拥有静态资产的工人(在第一次部署时创建)否:本地上传无部署钩. 重运行 deploy 在发布后,或将寄存器连接到Workers Builds.

在BetterCMS自己的建筑旁边添加了钩子 主机在那里不断建设,所以编辑器继续工作,并切换出出品主机 保持一个仪表板的决定。 复跑再用其钩. 注册需要企业号 计划;没有计划,现场仍然部署 deploy 说出版社不会重建它.

CI中没有浏览器: 设置主机自己的符号 —— VERCEL_TOKEN, (中文(简体) ), NETLIFY_AUTH_TOKEN,或 CLOUDFLARE_API_TOKEN 与 CLOUDFLARE_ACCOUNT_ID. 没有一个人, deploy 出口 1 和名称 这个. --json 指纹 { provider, site, url, env, hook } 从不打开浏览器。 云飞 需求 --dir 当框架不是Astro,Vite,Nuxt,Gatsby或Create React App时.

退出代码

代码含义
0 个结束了。 还有 whoami 签字后 logout 那时没什么好澄清的.
1个命令失败了——原因位于stderr的最后一行.
2个命令行本身是错误的:命令未知,旗帜不明,或者一面旗帜丢失了它的值.
3个init 财务报告和审定财务报表 status --gate 仅:设置出闸未完成. 所剩之物由上面所印出,并有恢复的命令.
其他项目退出代码 git 或打印错误的软件包管理器.

解决问题

  • "必须克隆..." ——安装git后再重跑.
  • 一个私人的Repo 要求证书 - 这是Git自己的提示;设置了SSH代理或 一个证书助手 重新运行.
  • "你批准了一个不同的项目..." 同意屏幕只预选项目; 重新运行,并选择命令中的一个.
  • "这个项目还没有部署源头" ——连接一个 GitHub repo 或发布一次.
  • "状态需要 - project -id, 或者运行更好的cms init先。" - 没有缓存 这个机器还没有。 传出ID,或跑 init。 。 。 .
  • "Sign -in需要为. 运行命令一次没有--Json批准它" —— 说 --json 从不打开浏览器 。 不运行同一命令 --json,批准它,然后重新运行.
  • "Could not reach https://api.bettercms.ai:"我无法到达https://api - DNS, TLS, 代理, 或30 s请求 暂停 。 检查网络或点 --api 可以到达的地方.
  • "API的意外反应" - 一个不是JSON预期的2xx尸体 将 API 改为 API .

版本与发布记录

@bettercms-ai/cli 共发布 40 个版本,首次发布于 2026/09/07;过去 12 个月发布了 40 个版本。

版本发布日期距今
0.16.2latest2026/11/026 天前
0.16.12026/11/017 天前
0.16.02026/10/318 天前
0.15.112026/10/318 天前
0.15.92026/10/2811 天前
0.15.82026/10/2811 天前

关于 @bettercms-ai/cli 的常见问题

@bettercms-ai/cli 是什么?

在本地进行一个BetterCMS项目:签名,复制源,安装依赖.

如何安装 @bettercms-ai/cli?

在项目目录运行 npm install @bettercms-ai/cli,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 bettercms,可以用 npx bettercms 直接运行。

@bettercms-ai/cli 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/bettercms-ai__cli 是否存在。

@bettercms-ai/cli 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@bettercms-ai/cli 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=20。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@bettercms-ai/cli 可以商用吗?

@bettercms-ai/cli 使用 未声明 许可。package.json 没有声明许可证。没有许可证的代码默认保留全部权利,商用前请联系作者或查看仓库中的 LICENSE 文件。以上为概括,不构成法律意见,请以许可原文为准。

@bettercms-ai/cli 的下载量有多少?

根据 npm 官方下载统计,@bettercms-ai/cli 在 2026/10/08 – 2026/11/06 这 30 天内被下载 4,426 次,日均约 148 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@bettercms-ai/cli 还在维护吗?

最新版本 0.16.2 发布于 2026/11/02(6 天前);至今共发布 40 个版本,其中过去 12 个月发布了 40 个;首次发布于 2026/09/07。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。