You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shopware 6.4 Docker预构建镜像缺失子主题Assets问题咨询

Shopware 6.4 Docker预构建镜像assets目录缺失问题解答

问题背景

我们通过Docker托管Shopware 6.4店铺,预构建流程如下:

  1. 无数据库的构建容器中执行:
    CI=1 SHOPWARE_SKIP_THEME_COMPILE=true PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true DATABASE_URL= bin/build-storefront.sh
    
  2. 将构建内容复制到生产容器:
    COPY --chown=www-data:www-data --from=build /var/www .
    
  3. 生产容器启动时执行:
    bin/console theme:dump
    bin/console theme:compile --keep-assets || true
    

流程可行,但public/bundles/ourchildtheme/assets目录缺失(icon和logo目录正常),手动执行bin/console assets:install无效,仅全量构建的bin/build.sh可解决,但不符合预构建设计初衷。


1. 该asset文件夹应在流程的哪个环节生成?

该目录应在预构建阶段的静态资源同步环节生成。

Shopware主题的自定义assets(如JS/CSS、静态资源文件)默认存储在主题的src/Resources/app/storefront/assets目录下,需要通过assets:install命令将这些文件复制到public/bundles对应目录中。你当前使用的bin/build-storefront.sh仅聚焦于Storefront的前端代码编译,未包含主题静态资源的同步步骤;而全量的bin/build.sh整合了assets:install、主题编译等流程,所以能生成该目录。

2. 应将该步骤放在预构建阶段还是容器启动阶段?

必须放在预构建阶段执行,完全符合预构建设计初衷。

静态资源的同步操作不需要依赖数据库,完全可以在无数据库的构建容器中完成。将该步骤放在预构建阶段,既能提前完成静态资源处理,避免生产容器启动时重复执行,又能确保复制到生产容器的文件包含完整的assets目录,无需在启动阶段额外处理。


调整后的预构建命令

在构建容器中,执行build-storefront.sh之后补充assets:install命令(需添加--symlink=false参数,确保生成实体文件而非软链接,避免复制到生产容器后失效):

CI=1 SHOPWARE_SKIP_THEME_COMPILE=true PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true DATABASE_URL= bin/build-storefront.sh
bin/console assets:install --symlink=false

调整后,预构建阶段会完整生成public/bundles/ourchildtheme/assets目录,复制到生产容器后启动阶段仅需执行主题编译命令即可,完全契合预构建的设计目标。

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 02:45:11