One the curious/frustrating bits of approaching Magento 2 as a traditional, full-stack Magento 1 developer, is the seemingly incomplete php bin/magento. While this command allows you to clear your Magento cache
php bin/magento cache:clean
and a command to generate “static content” (front end javascript, css, etc. files not generated by the PHP code in the application)
php bin/magento setup:static-content:deploy
It doesn’t contain commands that clear out the Less CSS cache in var/view_preprocessed. The problem? The PHP team at Magento seems to have shifted that responsibility to grunt, the front end build tool for Magento.
The Magento dev docs site has decent instructions (for 2.0 and 2.1) on setting up grunt (which has a precursor of setting up npm (which has a precursor of installing node)). Assuming you can pass that bar, the following two commands clears the generated CSS from both pub/static and var/view_preprocessed from the Magento/blank and Magento/luma themes.
grunt clean:blank
grunt clean:luma
The syntax here is a little weird – instead of calling a clean command with a parameter (blank, luma above) the parameter is actually part of the command name. I’m not 100% clear if this is a grunt thing, or a Magento core team thing.
It’s also a little weird in that you may be left wondering how to refer to your own themes in this syntax. A theme’s full identifier in Magento 2 includes a package name (Magento) and a theme name (blank) i.e. Magento/blank. However, the grunt command doesn’t include this theme name.
It turns out you need to add your theme to a configuration file – the theme Magento/blank is added below
#File: dev/tools/grunt/configs/themes.js
/* ... */
blank: {
area: 'frontend',
name: 'Magento/blank',
locale: 'en_US',
files: [
'css/styles-m',
'css/styles-l',
'css/email',
'css/email-inline'
],
dsl: 'less'
},
/* ... */
The key for this object (blank above) ends up becoming the value you use with grunt. Looking at this file, it seems you need to manually tell grunt which files makeup your theme, and that each identified theme can only clear our a single locale (en_US above).