mcpField
A
aem-cli

aem-cli

github.com/adobe开发316850 次安装今天更新
代码仓库

关于 aem-cli

AEM CLI 是用于 AEM Edge Delivery Services 的本地开发工具,提供开发服务器、导入服务器以及 da.live 内容同步命令。

主要功能

  1. 01支持代理的本地开发服务器
  2. 02导入服务器和界面
  3. 03da.live 内容同步
  4. 04可配置端口和 TLS
  5. 05项目级 .env 设置

适用场景

  1. 01在本地运行和预览 AEM Edge Delivery Services 项目
  2. 02启动导入界面以导入内容
  3. 03克隆并同步 da.live 内容

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/adobe/skills --skill aem-cli

安装后在 Claude Code 中输入/aem-cli确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

.releaserc.json
CHANGELOG.md
package.json
references/
command-reference.md

详细介绍

AEM CLI

用于 AEM Edge Delivery Services 的本地开发工具。提供三个命令:aem up(本地开发服务器)、aem import(导入服务器和 UI)、aem content(da.live 内容同步)。

二进制文件:aem(主要名称)、hlx(原 helix-cli 包的别名,该包在 v15.0.0 更名为 @adobe/aem-cli)。


1. 安装

前提条件: Node.js 12.11 或更高版本(推荐 Node 22 LTS)。[verified]

# Global install
npm install -g @adobe/aem-cli

# One-off via npx (no global install needed)
npx -y @adobe/aem-cli up

验证:

aem --version   # or: hlx --version
从旧版 helix-cli 包迁移

如果 npm install -g @adobe/aem-cli 失败并提示 File exists: …/hlx,说明仍安装着旧版包,且它占用了该二进制文件。请先卸载它(npm 包作用域为 @adobe,名称为 helix-cli):[verified]

npm uninstall -g @adobe/helix-cli
npm install -g @adobe/aem-cli

二进制文件名称从 hlx 改为 aem;安装后两者均可使用,因为 aem-cli 将 hlx 作为别名一并提供。


2. aem up — 本地开发服务器

Agent 标准调用方式:

aem up --no-open --forward-browser-logs

检查服务器是否正在运行:

curl -s -o /dev/null -w "%{http_code}" http://localhost:3000
# Expected: 200
主要标志
标志功能
--no-open启动时不打开浏览器窗口
--forward-browser-logs将浏览器控制台消息(log、error、warn、info)转发到终端
--port <n>使用不同端口侦听(默认值:3000)
--addr <addr>绑定地址;使用 * 允许外部连接(默认值:127.0.0.1)
--url <url>用于代理内容的源 URL(覆盖项目的默认页面 URL)
--html-folder <dir>从 <dir> 提供本地 HTML 文件,无需扩展名
--html-mount <path>提供 --html-folder 文件的 URL 路径(默认值:/<dir>)
--no-livereload禁用文件更改时的浏览器自动重新加载
--stop-other启动前停止使用同一端口的其他 AEM CLI 实例(默认值:true)
--tls-cert <file>TLS .pem 文件的路径(参见 §4)
--tls-key <file>TLS .key 文件的路径(参见 §4)
--allow-insecure允许向上游服务器发送不安全请求(使用自签名证书)
--print-index打印当前页面的索引记录(用于调试)
--site-token <token>CLI 访问网站所需的站点令牌
--cookies代理所有 Cookie(默认仅代理 hlx-auth-token)

--html-folder: 如果不使用此选项,则绝不会提供本地 HTML 文件——所有请求都会代理到远程管道,本地独有路径会返回 404。[verified]

在本地提供导入的 HTML(preview-import 模式)
aem up --html-folder drafts --no-open --forward-browser-logs
# Files in ./drafts/ are served at /drafts/<name> (no extension needed)

3. .env 配置

所有选项都可以保存在项目根目录的 .env 文件中;系统会自动加载。[verified]

# .env example
AEM_PORT=8080
AEM_PAGES_URL=https://stage.myproject.com
AEM_FORWARD_BROWSER_LOGS=true
AEM_HTML_FOLDER=drafts
AEM_TLS_CERT=server.crt
AEM_TLS_KEY=server.key
AEM_OPEN=/products

完整的 AEM_* 环境变量参考及默认值,请参阅 references/command-reference.md。


4. HTTPS / TLS

受信任的本地证书(推荐——避免浏览器警告)

安装 mkcert(macOS 上使用 brew install mkcert,Windows 上使用 choco install mkcert,其他系统上使用 go install filippo.io/mkcert@latest),然后:

mkcert -install                                          # one-time CA install
mkcert -cert-file server.crt -key-file server.key localhost 127.0.0.1
aem up --tls-cert server.crt --tls-key server.key
自签名证书(不使用 mkcert)
openssl req -new -newkey rsa:4096 -x509 -sha256 -days 365 -nodes \
  -out server.crt -keyout server.key -subj "/CN=localhost"
aem up --tls-cert server.crt --tls-key server.key
在 .env 中持久化 TLS 配置
AEM_TLS_CERT=server.crt
AEM_TLS_KEY=server.key

5. 公司代理和证书信任

在会拦截 HTTPS 的代理后运行时,aem up 会失败并提示 unable to get local issuer certificate。 从浏览器导出公司 CA 证书或向 IT 部门索取,然后设置:

# macOS / Linux
export NODE_EXTRA_CA_CERTS=/path/to/corporate-ca.crt
aem up

# Windows
set NODE_EXTRA_CA_CERTS=./certs/corporate-ca.pem
aem up

NODE_EXTRA_CA_CERTS 是 Node 内置变量——请在 Shell 配置文件或 CI 中设置,而不是在 .env 中设置。

代理环境变量:

变量用途
HTTP_PROXYHTTP 请求的代理
HTTPS_PROXYHTTPS 请求的代理
ALL_PROXY任一协议的回退代理
NO_PROXY以逗号分隔的绕过代理的主机;* 表示禁用所有代理

6. aem import — 导入服务

本地导入服务(默认端口为 3001),用于提供 helix-importer-ui。

aem import                   # opens Importer UI in browser at port 3001
aem import --no-open         # headless / background start
aem import --port 3002       # different port

主要标志:

标志默认值功能
--port3001导入服务端口
--no-open—不打开浏览器窗口
--allow-insecuretrue允许代理站点使用自签名证书
--ui-repo <url>GitHub 上的 helix-importer-ui 仓库自定义导入器 UI 仓库
--skip-uifalse跳过 UI 的下载和安装
--headers-file <file>—包含代理请求自定义标头的 JSON 文件
--cache <dir>—将代理响应缓存到本地文件夹
--dump-headersfalse在控制台打印请求标头以进行调试
--tls-cert / --tls-key—为导入服务本身配置 TLS(见 §4)

工作流: 如需编写 import.js 转换脚本或运行完整导入流程,请使用 page-import 或 generate-import-html 技能。本技能仅介绍如何启动和配置服务。


7. aem content — da.live 内容同步

aem content clone [--path /]   # auth via browser popup; clones into ./content/
aem content status             # show added / modified / deleted files
aem content diff [path]        # diff local vs remote
aem content merge [path]       # sync remote changes into local files
aem content add <files..>      # stage changes (like git add)
aem content commit -m "..."    # commit staged changes (like git commit)
aem content push               # upload committed changes to da.live
aem content push --force       # overwrite remote on conflict

身份验证令牌缓存于 .hlx/.da-token.json(已加入 gitignore);首次使用时通过浏览器 OAuth 授权。

直接读取令牌以验证 curl 调用:

TOKEN=$(jq -r .access_token .hlx/.da-token.json)
已知行为:二进制文件

aem content push 会静默跳过二进制文件(图片、PDF、字体)。[verified]

验证二进制文件是否已上传:

curl -sI https://content.da.live/<org>/<repo>/path/to/image.png | grep -i "content-type"

如果返回 404,请通过 DA Source API 直接上传二进制文件:

TOKEN=$(jq -r .access_token .hlx/.da-token.json)
curl -X POST \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: image/png" \
  --data-binary @./image.png \
  "https://admin.da.live/source/<org>/<repo>/path/to/image.png"
已知行为:上传前的 HTML 规范化

上传前的规范化处理会移除 EDS 图标装饰(<span class="icon icon-X"> 等)。 [verified] 如需保留 EDS HTML 的原始字节,请直接 POST 到 DA Source API:

curl -X POST \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: text/html" \
  --data-binary @./page.html \
  "https://admin.da.live/source/<org>/<repo>/path/to/page.html"

有关 DA Source API 契约和速率限制,请参阅 da-content 技能(平台参考 §7)。


故障排除

症状原因修复方法
npm install -g @adobe/aem-cli → File exists: …/hlx旧的 helix-cli 软件包仍占用该二进制文件卸载旧软件包(见 §1),然后重新安装
aem up → EADDRINUSE: address already in use :::3000端口 3000 已被占用传入 --port <other>,或终止占用 3000 端口的进程
aem up → unable to get local issuer certificate公司代理拦截了 TLS导出公司 CA 证书 → export NODE_EXTRA_CA_CERTS=/path/to/ca.crt
localhost:3000/mypath 返回 404mypath/ 中的本地 HTML 文件未挂载添加 --html-folder mypath(或在 .env 中设置 AEM_HTML_FOLDER=mypath)
aem up → 实际存在的页面返回 pipeline 404代理使用了错误的源 URL传入 --url https://your-pages-url.aem.page
aem content push 报告成功,但二进制文件缺失CLI 静默跳过了二进制文件通过 DA Source API 上传二进制文件(见 §7)
aem content push 从 HTML 中移除了图标 span上传前的规范化处理移除了 EDS 装饰如需保留原始字节,请直接 POST 到 DA Source API
aem import UI 无法加载端口 3001 被占用,或 UI 下载失败尝试使用 --port 3002;或使用 --skip-ui 并单独打开 UI

参考

评论

支持 Markdown