shopify 从github获取主题文件时,assets文件中的子文件夹未获取到

0 阅读3分钟

从 GitHub 同步 Shopify 主题代码时,assets 文件夹下的子文件夹(比如 assets/images/assets/icons/)没有被同步到 Shopify 店铺,这并非 GitHub 同步的问题,而是 Shopify 主题系统的底层限制 —— Shopify 不支持 assets 文件夹下的嵌套子文件夹,只会识别 assets 根目录下的文件,子文件夹及其中的内容会被直接忽略。

一、核心原因:Shopify 对 assets 文件夹的强制规则

Shopify 主题的 assets 目录是特殊的静态资源目录,有严格限制:

  • ✅ 仅识别 assets 根目录 下的文件(如 assets/banner.jpgassets/cart-icon.svg);
  • ❌ 完全忽略 assets 下的所有子文件夹(如 assets/images/assets/css/assets/icons/),同步时不会读取这些子文件夹里的任何文件。

这就是为什么 GitHub 仓库里有 assets/images/banner.jpg,但同步到 Shopify 后却看不到的原因 —— Shopify 直接跳过了 images 子文件夹。

二、解决方案:扁平化 assets 结构(唯一可行方案)

需要调整 GitHub 仓库的文件结构,将子文件夹里的图片 / 文件移到 assets 根目录,并用命名前缀区分原分类(比如 images/banner.jpgbanner-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">

  1. 推送到 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/ 等子文件夹(方便分类管理),可通过 构建脚本 自动扁平化文件,避免手动重命名:

  1. 本地创建 scripts/build-assets.sh 脚本:
#!/bin/bash 
# 自动将 assets/*/ 下的文件复制到 assets 根目录,加前缀 
cp assets/images/*.jpg assets/ --suffix=-image 
cp assets/icons/*.svg assets/ --suffix=-icon

  1. 开发完成后,先执行脚本扁平化文件,再提交到 GitHub:
# 执行脚本 
bash scripts/build-assets.sh 

# 提交到 GitHub 
git add assets/ 
git commit -m "build: 扁平化assets文件" 
git push origin main

四、关键注意事项

  1. 禁止在 assets 建子文件夹:这是 Shopify 的硬规则,无论通过 GitHub 同步还是手动上传,子文件夹都不会被识别;
  2. 命名规范:扁平化后文件命名用「功能 + 类型 + 后缀」(如 product-card-image.jpg),避免重名;
  3. 批量处理:若有大量子文件夹文件,可批量重命名(如用 Python/Shell 脚本),避免手动操作出错;
  4. 第三方工具同步:若用 Syncify、Gitify 等工具同步,同样遵循此规则 —— 仅同步 assets 根目录文件。

总结

  1. Shopify 不支持 assets 文件夹下的子文件夹,是图片无法同步的核心原因;
  2. 唯一解决方案是扁平化 assets 结构:将子文件夹文件移到 assets 根目录,用命名前缀区分分类;
  3. 修正 Liquid 中的 asset_url 引用路径,重新推送 GitHub 并同步到 Shopify 即可解决图片不显示问题。