Magento 2 static content deploy is the Magento feature that helps to keep the user experience at the top levels. Why? It ensures your store pages are built correctly, static view files are downloaded by the browser, and static content is displayed according to user requests.
In this comprehensive guide, you will find everything you need to know about static content deploy in Magento 2. What it is, reasons to use it, how to deploy static content in Magento 2 in three different ways and how to reduce deployment time to zero.
Moreover, we’ll cover the Magento deployment best practices, strategies and examples to help you comprehend the topic better.
Post Contents [hide]
Whether you’re just starting with Magento development or have some knowledge already, this article will help hone your skills. You'll discover something new about the static content deploy in Magento.
We’ve got a lot to cover, but let’s start with the basics first.
Static View Files Deployment Overview
The static view file deployment allows you to write static files into the Magento system when setting Magento for production mode.
Static part refers to the files that can be cached if not generated dynamically and view — to the Model-View-Controller layer.
You can find the static view files in the /pub/static (contains js, css, html and others) or /var/view_preprocessed directory (contains phtml files).
It is also important to note that the deployment of static view files is determined by the Magento modes:
- In default and developer mode Magento generates static files on demand and caches the rest of the files.
- In production static files are not generated or cached, you have to write static view files manually by the command. We’ll talk about it later on.
Why Use Magento Static Content Deploy?
Though static content deploy in Magento 2 is used by developers only, a lot of non-tech people still need to know why it is used and how it contributes to the user experience.
Static Content Availability
All Magento 2 extensions are located in the app or vendor folder. This is how the module file structure works in Magento. Correspondingly there is no access to these folders from the browser.
But still, modules and themes might have static content e.g. CSS, images, JavaScripts that go with the extension and are located in the theme folders. Since they are in the app and vendor folders, browsers can’t download these static files to display to your store visitors.
So, static content deploy allows you to move the extension files to the pub/static folder to make them available for download in the browser.
When Magento moves the files to the pub/static folder it checks whether the files were overridden in your theme or child theme.
Compiled LESS
Browsers can read only CSS while most styles are written with the LESS language. So for the browser to read these styles you need to compile them to CSS. This is another reason to use static content deploy to make LESS comprehensible to the browsers.
HTML Minification
If you have HTML minification enabled in the admin, static content deploy in Magento 2 will prepare the minified files and move them into the var/view_preprocessed folder.
So, if you make any changes in templates, JS, CSS, images, or install Magento 2 extensions, you have to use Magento static content deploy to make those changes available for the browser to download and display to the users.
Magento 2 Static Content Deploy Strategies
Regardless of the purpose, you use static content deploy for, Magento 2 allows you to incorporate different static content deploy strategies. They provide different deployment results and are used in different use cases.
Let’s review those cases and cover each of the strategies.
Standard
This static content deployment strategy is regular and most recognized. In the case of standard strategy, all static files for all packages are deployed and processed by \Magento\Framework\App\View\Asset\Publisher.
Also, all files for an arbitrary locale are deployed in each theme.
Quick
The quick strategy works the same way as a standard one. However, in all other locales in a theme, except for the arbitrary locale, files that override a deployed theme are defined and deployed.
The other files are copied from the deployed locale since they are considered similar (independent of the locale, area, or theme) for all locales.
Quick strategy name speaks for itself. Though a lot of files are duplicated in this method, the time required for deployment for multiple locales is reduced.
Compact
Unlike in quick strategy, in a compact one files are inherited from the base themes and locales which means they are stored in the base subdirectories. This avoids file duplication and allows you to store these reactions in the map files for each theme, locale, and area combination.
Then, the files are deployed to the subdirectories based on the following patterns:
Pattern | Description |
<area>/<theme>/<locale> | Deployed files are specific for certain area, theme, and locale. |
<area>/Magento/base/<locale> | Deployed files are specific for certain areas and locales, but similar for all themes. |
<area>/<theme>/default | Deployed files are similar for all locales of a certain theme of a particular area. |
<area>/Magento/base/default | Deployed files are specific for a certain area, but similar for all locales and themes. |
base/Magento/base/<locale> | Deployed files are specific for a particular locale, but similar for all themes and areas. |
base/Magento/base/default | Deployed files are similar for all themes, areas, and locales. |
How to Deploy Static Content in Magento 2?
Once you choose what static content deployment strategy to utilize in your store development, you need to explore the way you can do this.
As we’ve already mentioned, you can find static view files in /pub/static or dir/var/view_preprocessed directories. However, some files need to be written to Magento 2 file system manually.
In developer mode, you need to clean the old CSS, JS, layout files to avoid static files issues and make sure all new files will run correctly in a new module.
There are a few possible ways how you can clean the old files in Magento 2.
Manually
To deploy static view files in Magento 2 manually:
- Log in to your Magento server as the file system owner.
- Delete all files in /pub/static folder. Don’t delete the .htaccess file.
- Run the static content deployment command:
bin/magento setup:static-content:deploy
Note: pub/static directory must be writable, if you enable merging of the static view files in the admin. If the pub/static is not writable, the static-content:deploy won’t run.
Pro tip: we recommend to delete only the following files from the pub/static folder:
pub/static/_cache
pub/static/deployed_version.txt
pub/static/frontend
pub/static/adminhtml
pub/static/_requirejs
Automatically
Magento also allows you to clear the generated static view files from the admin panel. You just need to go to the Systems > Tools > Cache Management and click the Flush Static Files Cache button.
Via CLI Command
Running static content deploy via CLI command is the most common way of cleaning static view files in Magento 2.
Generally, the CLI command used for static content deploy is
bin/magento setup:static-content:deploy
However, it can depend on the different parameters you need to use. None of them is obligatory, but we’ll review all of them to provide you a better understanding of how you can vary the Magento static content deploy.
Option | Command Description | |
-l |
-- language | Generates files for languages you specify. By default, static content deploy generates files for all languages. |
--exclude-language | Generates files for all languages, except excluded language. | |
-t |
--theme <theme> | Generates files for specified themes. By default, files are generated for all themes. |
--exclude-theme <theme> | Generates files for all themes, except excluded themes. | |
-a | --area | Generates files for all specified areas (adminhtml or frontend). By default, files are generated for all areas. |
--exclude-area | Generates files for all areas, except for excluded ones. | |
-j |
--jobs | Enables parallel processing with the specified number of jobs. The default value is 0 which doesn't run the parallel processing. |
--symlink-locale | Creates symlinks for the locales that have no customizations and are passed for development. | |
--content-version=CONTENT-VERSION | Uses the custom version of static content to ensure the version of static content is identical and caching works well when deploying on multiple nodes. | |
--no-javascript | Doesn't deploy JavaScript files. | |
--no-css | Doesn't deploy CSS files. | |
--no-less | Doesn't deploy LESS files. | |
--no-images | Doesn't deploy images. | |
--no-fonts | Doesn't deploy font files. | |
--no-html | Doesn't deploy HTML files. | |
--no-misc | Doesn't deploy other file types (.md, .jbf, .csv, .json, .txt, .htc, .swf). | |
--no-html-minify | Doesn't minify HTML files. | |
- s | - s quick | Uses quick deployment strategy. This is a default option if nothing else is selected. |
- s standard | Uses standard deployment strategy to deploy all files in all packages. | |
- s compact | Uses compact deployment strategy. | |
--no-parent | --no-parent | Doesn't generate files for the parent or current themes. It is recommended to use this parameter if you don't use your parent or current theme explicitly to increase the time of the process. |
-f | -- force | Deploys files in any mode. By default only works in production mode. |
That’s quite a list. You obviously won’t use all parameters in one command. However, there are different use cases you might want to explore.
Examples of Magento Static Content Deploy
Now that you know why static content deploy is used, what strategies are there, let's delve into the development and check the examples of how you can run static content deploy commands.
Magento 2 static content deploy specific theme
When you run static content deploy by default it deploys all files on all themes which takes time. To run it only for a specific theme, use the following parameters:
bin/magento setup:static-content:deploy --theme="ThemeVendor/themename"
Or if you want to exclude a specific theme from deployment:
bin/magento setup:static-content:deploy --exclude-theme="ThemeVendor/themename"
Static content deploy in developer and default mode
Pro tip: If you only use static content deploy to install, update or delete Magento 2 extensions, you can simply run:
php bin/magento setup:static-content:deploy -f
Magento 2 deploy static content language
There can be different issues with the static content deployment. So if you use different languages, we recommend you to run it for specified languages.
bin/magento setup:static-content:deploy de_DE
Static content deploy in Magento 2 is very flexible, so you can combine different parameters when deploying static view files to the Magento file system.
For example, you can run deployment in default or development mode for a specific theme and locale.
bin/magento setup:static-content:deploy -d --theme="ThemeVendor/themename" de_DE
Besides, you can exclude all fonts and CSS from deployment on a specific locale.
bin/magento setup:static-content:deploy de_DE --no-css --no-fonts
There are multiple other parameters combinations you can use depending on your case. You'll definitely get to use some of them.
Troubleshooting the Static View Files Deployment
The most common issues with static content deploy are connected with the permissions and users that are granted the right to run the deployment commands. One of them is bash: bin/magento: Permission denied.
All you need to do in this case is just review user permissions and make sure you run the commands from the Magento root directory. Very often the system will provide the instruction on fixing the permission issue if there appear any.
However, there is one more issue. It is the following:
ERROR: You need to install the Magento application before running this utility.
To fix it you should:
- Install Magento using CLI or setup wizard.
- Log in to the Magento server as a file system owner.
- Delete all files from the pub/static directory, except for the .htaccess file.
- Run static content deployment command:
bin/magento setup:static-content:deploy
Reduce Downtime during Static Content Deploy
Usually, the system requires some time to deploy static content to the Magento system. Very often deployment time is associated with website downtime.
Since you already know there are different deployment strategies. Some allow you to run deployment faster than others, but you can't avoid downtime completely which is bad in terms of customer experience.
So, you should consider more effective ways of running Magento static content deploy. Review these zero downtime deployment commands to avoid downtime and provide an uninterrupted experience for your customers.