自动化与脚本
在安装、运行或配置 Adobe AEM…
适用于 AEM Edge Delivery Services 项目的本地开发工具链,需安装/迁移 AEM CLI、启动本地服务器/导入服务器、配置证书与代理、同步 da.live 内容或排查 aem up 故障时。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 59/100 ×0.15
适用场景
在安装、运行或配置 Adobe AEM 特定
解决思路
- 确认前置条件:Node.js 12.11 或更新(推荐 Node 22 LTS)。
- 全局安装:npm install -g @adobe/aem-cli。
- 或一次性运行:npx -y @adobe/aem-cli up。
- 验证安装:aem --version(或 hlx --version)。
- 从旧 helix-cli 迁移时,如果 npm install -g @adobe/aem-cli 报 File exists: …/hlx,先卸载旧包:npm uninstall -g @adobe/helix-cli。
- 然后重新安装:npm install -g @adobe/aem-cli。
- 了解二进制名:主命令 aem,旧 helix-cli 别名 hlx 仍可用;v15.0.0 起包名改为 @adobe/aem-cli。
- 启动本地开发服务器(agent 标准):aem up --no-open --forward-browser-logs。
- 检查服务器是否运行:curl -s -o /dev/null -w "%{http_code}" http://localhost:3000,期望 200。
- 使用 --no-open:启动时不打开浏览器窗口。
- 使用 --forward-browser-logs:把浏览器控制台消息(log/error/warn/info)转发到终端。
- 使用 --port <n>:改用其他端口,默认 3000。
- 使用 --addr <addr>:绑定地址,用 * 允许外部连接,默认 127.0.0.1。
- 使用 --url <url>:指定要代理内容的来源 URL,覆盖项目默认 pages 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 文件路径。
- 使用 --tls-key <file>:指定 TLS 的 .key 文件路径。
- 使用 --allow-insecure:允许对上游服务器发起不安全(自签名证书)请求。
- 使用 --print-index:打印当前页面的索引记录,便于调试。
- 使用 --site-token <token>:设置 CLI 访问网站所需的 site token。
- 使用 --cookies:代理所有 cookies,默认只代理 hlx-auth-token。
- 注意 --html-folder:不设置时,本地 HTML 文件不会被服务,所有请求会代理到远程 pipeline,本地路径返回 404。
- 本地服务 import HTML(preview-import 模式):aem up --html-folder drafts --no-open --forward-browser-logs;./drafts/ 中文件会以 /drafts/<name> 提供,无需扩展名。
- 使用 .env:所有选项都可持久化到项目根目录 .env,自动加载。
- 在 .env 中配置:AEM_PORT=8080。
- 在 .env 中配置:AEM_PAGES_URL=https://stage.myproject.com。
- 在 .env 中配置:AEM_FORWARD_BROWSER_LOGS=true。
- 在 .env 中配置:AEM_HTML_FOLDER=drafts。
- 在 .env 中配置:AEM_TLS_CERT=server.crt。
- 在 .env 中配置:AEM_TLS_KEY=server.key。
- 在 .env 中配置:AEM_OPEN=/products。
- 查看完整 AEM_* 环境变量及默认值:references/command-reference.md。
- 配置受信任本地证书(推荐,避免浏览器警告):安装 mkcert——macOS 用 brew install mkcert,Windows 用 choco install mkcert,其他用 go install filippo.io/mkcert@latest。
- 初始化 mkcert CA:mkcert -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。
- 在 .env 持久化 TLS:AEM_TLS_KEY=server.key。
- 处理企业代理证书信任:当 aem up 报 unable to get local issuer certificate(HTTPS 拦截代理),从浏览器导出企业 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 profile 或 CI 中,不要放在 .env。
- 代理环境变量:HTTP_PROXY 用于 HTTP 请求代理。
- 代理环境变量:HTTPS_PROXY 用于 HTTPS 请求代理。
- 代理环境变量:ALL_PROXY 作为任一协议的 fallback。
- 代理环境变量:NO_PROXY 用逗号分隔要绕过代理的主机;* 禁用所有代理。
- 启动 aem import:aem import,默认端口 3001,并在浏览器打开 Importer UI。
- 无头/后台启动:aem import --no-open。
- 换端口:aem import --port 3002。
- aem import 的 --port 默认 3001。
- aem import 的 --allow-insecure 默认 true,允许代理站点使用自签名证书。
- aem import 的 --ui-repo <url>:使用自定义 Importer UI 仓库。
- aem import 的 --skip-ui 默认 false;为 true 时跳过下载/安装 UI。
- aem import 的 --headers-file <file>:提供 JSON 文件,为代理请求设置自定义 headers。
- aem import 的 --cache <dir>:将代理响应缓存到本地文件夹。
- aem import 的 --dump-headers 默认 false;为 true 时向控制台打印请求 headers 以调试。
- aem import 的 --tls-cert / --tls-key:为 import server 本身配置 TLS。
- 编写 import.js 转换脚本或运行完整导入流水线时,使用 page-import 或 generate-import-html 技能;本技能仅覆盖启动和配置 aem import 服务器。
- 使用 aem content clone [--path /]:通过浏览器弹窗认证,并克隆到 ./content/。
- 使用 aem content status:显示 added / modified / deleted 文件。
- 使用 aem content diff [path]:比较本地与远端。
- 使用 aem content merge [path]:把远端变更同步到本地文件。
- 使用 aem content add <files..>:暂存变更(类似 git add)。
- 使用 aem content commit -m "...":提交已暂存变更(类似 git commit)。
- 使用 aem content push:把已提交变更上传到 da.live。
- 使用 aem content push --force:冲突时覆盖远端。
- 认证 token 缓存在 .hlx/.da-token.json(gitignored);首次使用会打开浏览器 OAuth。
- 直接读取 token 以认证 curl:TOKEN=$(jq -r .access_token .hlx/.da-token.json)。
- 注意 aem content push 对二进制文件(图片、PDF、字体)会静默 no-op。
- 验证二进制上传是否成功: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 icon 装饰(<span class="icon icon-X"> 等)。
- 若要字节级保真的 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 包仍占用二进制;先卸载旧包再重装。
- 排障: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 返回 404 是 mypath/ 中的本地 HTML 文件未挂载;加 --html-folder mypath(或 .env 中 AEM_HTML_FOLDER=mypath)。
- 排障:aem up 对线上存在的页面返回 pipeline 404 是代理的 origin URL 错误;传 --url https://your-pages-url.aem.page。
- 排障:aem content push 报告成功但二进制缺失,是 CLI 对二进制静默 no-op;改用 DA Source API 上传二进制。
- 排障:aem content push 剥离 HTML 中的 icon spans,是上传前规范化移除了 EDS 装饰;改为直接 POST 到 DA Source API 做字节级保真上传。
- 排障:aem import UI 不加载,可能是 3001 端口占用或 UI 下载失败;尝试 --port 3002,或用 --skip-ui 后单独打开 UI。
- 参考:references/command-reference.md 有所有命令的完整 flag 和 AEM_* 环境变量表。
- 参考上游文档:https://www.npmjs.com/package/@adobe/aem-cli(GitHub 仓库因历史原因名为 helix-cli)。
- Importer UI:helix-importer-ui(可通过 npm 或 GitHub 搜索)由 aem import 提供。
适用边界 · 注意事项
- 不适用于非 AEM Edge Delivery Services 或不需要 @adobe/aem-cli 的项目。
- 若问题只涉及 da.live 内容格式规则或 DA Source API 合同/限流,应使用 da-content。
- 若要编写 EDS block 代码,使用 content-driven-development;若要写 import.js 或跑完整导入流水线,使用 page-import 或 generate-import-html。