从 GitHub 同步 Shopify 主题代码时,assets 文件夹下的子文件夹(比如 assets/images/、assets/icons/)没有被同步到 Shopify 店铺,这并非 GitHub 同步的问题,而是 Shopify 主题系统的底层限制 —— Shopify 不支持 assets 文件夹下的嵌套子文件夹,只会识别 assets 根目录下的文件,子文件夹及其中的内容会被直接忽略。
一、核心原因:Shopify 对 assets 文件夹的强制规则
Shopify 主题的 assets 目录是特殊的静态资源目录,有严格限制:
- ✅ 仅识别
assets根目录 下的文件(如assets/banner.jpg、assets/cart-icon.svg); - ❌ 完全忽略
assets下的所有子文件夹(如assets/images/、assets/css/、assets/icons/),同步时不会读取这些子文件夹里的任何文件。
这就是为什么 GitHub 仓库里有 assets/images/banner.jpg,但同步到 Shopify 后却看不到的原因 —— Shopify 直接跳过了 images 子文件夹。
二、解决方案:扁平化 assets 结构(唯一可行方案)
需要调整 GitHub 仓库的文件结构,将子文件夹里的图片 / 文件移到 assets 根目录,并用命名前缀区分原分类(比如 images/banner.jpg → banner-image.jpg),具体步骤如下:
1. 本地调整文件结构
# 1. 进入本地 Shopify 主题目录
cd /你的本地主题路径
# 2. 将 assets/images 下的文件移到 assets 根目录,并重命名(加前缀区分)
mv assets/images/banner.jpg assets/banner-image.jpg
mv assets/images/product-card.png assets/product-card-image.png
# 3. 删除空的子文件夹(可选)
rm -rf assets/images
2. 修正 Liquid 中的图片引用路径
因为文件路径变了,需要同步修改 Liquid 里的 `asset_url` 引用:
<!-- 原错误写法(引用子文件夹) -->
<img src="{{ 'images/banner.jpg' | asset_url }}" alt="banner">
<!-- 新正确写法(扁平化后) -->
<img src="{{ 'banner-image.jpg' | asset_url }}" alt="banner">
- 推送到 GitHub 并重新同步到 Shopify
# 1. 提交文件结构修改到 GitHub
git add assets/ git commit -m "fix: 扁平化assets文件夹,适配Shopify规则"
git push origin main
# 2. 用 Shopify CLI 重新同步到店铺(强制覆盖)
shopify theme push --force
4. 验证是否同步成功
- 打开 GitHub 仓库,确认
assets根目录下有重命名后的图片文件(如banner-image.jpg); - 进入 Shopify 后台 → 在线商店 → 主题 → 编辑代码 → 左侧
Assets文件夹,能看到这些文件即同步成功; - 刷新店铺页面,图片即可正常显示。
三、进阶优化:保持本地开发的文件夹结构(可选)
如果本地开发时想保留 assets/images/ 等子文件夹(方便分类管理),可通过 构建脚本 自动扁平化文件,避免手动重命名:
- 本地创建
scripts/build-assets.sh脚本:
#!/bin/bash
# 自动将 assets/*/ 下的文件复制到 assets 根目录,加前缀
cp assets/images/*.jpg assets/ --suffix=-image
cp assets/icons/*.svg assets/ --suffix=-icon
- 开发完成后,先执行脚本扁平化文件,再提交到 GitHub:
# 执行脚本
bash scripts/build-assets.sh
# 提交到 GitHub
git add assets/
git commit -m "build: 扁平化assets文件"
git push origin main
四、关键注意事项
- 禁止在 assets 建子文件夹:这是 Shopify 的硬规则,无论通过 GitHub 同步还是手动上传,子文件夹都不会被识别;
- 命名规范:扁平化后文件命名用「功能 + 类型 + 后缀」(如
product-card-image.jpg),避免重名; - 批量处理:若有大量子文件夹文件,可批量重命名(如用 Python/Shell 脚本),避免手动操作出错;
- 第三方工具同步:若用 Syncify、Gitify 等工具同步,同样遵循此规则 —— 仅同步 assets 根目录文件。
总结
- Shopify 不支持
assets文件夹下的子文件夹,是图片无法同步的核心原因; - 唯一解决方案是扁平化 assets 结构:将子文件夹文件移到 assets 根目录,用命名前缀区分分类;
- 修正 Liquid 中的
asset_url引用路径,重新推送 GitHub 并同步到 Shopify 即可解决图片不显示问题。