Build a complete Project
Usually, when you want to deploy your project, you have to run composer install and compile the assets of the project. Shopware CLI provides a single command which does all of this for you.
WARNING
This command modifies the given directory and deletes files. Make sure you have committed all your changes before running this command.
shopware-cli project ci <path>What does it do?
- It runs
composer install(by default, only installs the production dependencies, use--with-dev-dependenciesto install the dev dependencies as well) - Looks for missing assets of extensions and only compiles the missing assets to speed up the build process
- Deletes unnecessary files like
node_modulesand many more to save disk space - Deletes source code of compiled assets to save disk space
- Merges snippets of extensions to speed up Administration
Using private Composer repositories
If you want to use packages.shopware.com as a private Composer repository, make sure you have set SHOPWARE_PACKAGES_TOKEN environment variable to your Composer token. This can be found in your Shopware Account.
For other private Composer repositories, you can use the auth.json file in the root of your project or set COMPOSER_AUTH environment variable with the content of the auth.json file.
For more information, see the Composer documentation.
Reducing JavaScript in Storefront
Shopware's default browserlist still supports older browsers like Internet Explorer 11. If you want to reduce JavaScript polyfill and CSS prefixes, you can adjust the browserlist configuration in the .shopware-project.yml file.
build:
# Browserlist configuration for Storefront
browserslist: 'defaults'You can check here which browsers would be affected.
Configuration options
You can configure the build process with a .shopware-project.yml file. The following options are available:
build:
# Browserlist configuration for Storefront
browserslist: 'defaults'
# Paths that should be deleted
cleanup_paths:
- 'node_modules'
# At the end of the process, bin/console asset:install is executed, this can be disabled here
disable_asset_copy: false
# Exclude the following extensions from the build process
exclude_extensions:
- 'SwagExample'
# Keep the extension Administration and Storefront source code
keep_extension_source: false
# Keep the source maps of the compiled assets
keep_source_maps: false
# Delete after bin/console asset:install all assets in the extensions, so only live in public folder.
# This only works when the assets are served directly from the public folder.
remove_extension_assets: false
# Allows to force building an extension even when the assets existing. A use-case could be if you used composer patches for a specific extension.
force_extension_build:
- name: 'SomePlugin'Supporting bundles
Plugins and Apps are automatically detected by Shopware CLI. Custom bundles (classes that extend bundle class from Shopware) cannot be automatically detected as Shopware CLI does not execute any PHP code. Therefore you need to add the path of the custom bundle to your project composer.json:
{
"extra": {
"shopware-bundles": {
// The key is the relative path from project root to the bundle
"src/MyBundle": {}
}
}
}If your bundle folder names does not match your bundle name, you can use the name key to map the folder to the bundle name.
{
"extra": {
"shopware-bundles": {
"src/MyBundle": {
"name": "MyFancyBundle"
}
}
}
}Bundle packaged in own composer package
If your bundle is a own composer package, make sure your composer type is shopware-bundle and that you have set a shopware-bundle-name in the extra part of the config like this:
{
"name": "my-vendor/my-bundle",
"type": "shopware-bundle",
"extra": {
"shopware-bundle-name": "MyBundle"
}
}With this Composer type, shopware-cli extension build also works for your bundle, if you want to distribute compiled assets.
Example Docker Image
This is an example Dockerfile which builds a Shopware project and copies the source code to the /var/www/html folder.
#syntax=docker/dockerfile:1.4
# pin versions
FROM ghcr.io/shopware/docker-base:8.3 AS base-image
FROM ghcr.io/shopware/shopware-cli:latest-php-8.3 AS shopware-cli
# build
FROM shopware-cli AS build
ARG SHOPWARE_PACKAGES_TOKEN
ADD . /src
WORKDIR /src
RUN --mount=type=secret,id=composer_auth,dst=/src/auth.json \
--mount=type=cache,target=/root/.composer \
--mount=type=cache,target=/root/.npm \
/usr/local/bin/entrypoint.sh shopware-cli project ci /src
FROM base-image
COPY --from=build --chown=82 --link /src /var/www/htmlBesides Docker, it is also a perfect fit for any deployment variant.