What's the difference between following commands (Magento 2)
bin/magento setup:static-content:deploy and grunt exec
When should you use which command?
2 Answers 2
As far as I know, Grunt is a Node Js package, so at the first time to make the Grunt commands can work, we need to install Node Js.
For instance, when run the command: grunt clean:<theme>, Gruntfile.js under Magento root folder is used. Take a look this file:
var _ = require('underscore'),
path = require('path'),
themes = require('./dev/tools/grunt/configs/themes'),
configDir = './dev/tools/grunt/configs',
taskDir = './dev/tools/grunt/tasks';
[
taskDir + '/mage-minify',
taskDir + '/deploy',
taskDir + '/black-list-generator',
taskDir + '/clean-black-list',
taskDir + '/static',
'time-grunt'
].forEach(function (task) {
require(task)(grunt);
});
We can see some configs:
1) For our theme config: themes = require('./dev/tools/grunt/configs/themes'), usually uses for grunt watch command.
2) Load config: configDir = './dev/tools/grunt/configs'.
3) Tasks: taskDir = './dev/tools/grunt/tasks'. We have some tasks: deployment, minify, etc.
Refresh themes:
/**
* Refresh themes.
*/
refresh: function () {
var tasks = [
'clean',
'exec:all'
];
_.each(themes, function(theme, name) {
tasks.push('less:' + name);
});
grunt.task.run(tasks);
},
The refresh function is the most useful function, this function defines some tasks: grunt clean:<theme>, grunt less:<theme> and exec:all
Dig into deployment task: grunt clean:<theme>
The clean config is loaded: dev/tools/grunt/configs/clean.js. And then, the deploy command is executed:
dev/tools/grunt/tasks/deploy.js
var deploy,
done = this.async();
log('Cleaning "pub/static"...');
exec('rm -rf pub/static/*');
ok('"pub/static" is empty.');
log('Deploying Magento application...');
deploy = spawn('php', ['bin/magento', 'setup:static-content:deploy']);
As we can see, Grunt -grunt clean:<theme>- will execute two commands in order:
--Delete the pub static rm -rf pub/static/
--The static content deploy command: php bin/magento setup:static-content:deploy.
Which one we will choose?
We can deploy static content in both ways, but Grunt is preferred in development mode and static content deploy command in production mode. It also makes sense because we don't need to install Node JS and do more Css style on production environment.
-
1ok so if I get it correctly you can deploy static content in both ways but grunt is preferred in development mode and static content deploy command in production mode.Devtype– Devtype2016年09月20日 10:34:37 +00:00Commented Sep 20, 2016 at 10:34
-
Yes, it makes sense because we don't need to install Node js and do more in our server .Khoa Truong– Khoa Truong2016年09月20日 10:39:00 +00:00Commented Sep 20, 2016 at 10:39
Grunt is a shortcut for magento static deploy. So, grunt exec is much faster, especially if you use 'grunt exec:vendor'. I always use grunt, grunt exec:vendor and grunt less to compile less files.
-
Can grunt also used for clean static phtml files?Prince Patel– Prince Patel2017年01月17日 05:37:42 +00:00Commented Jan 17, 2017 at 5:37
-
No, to use new changes you made in phtml files, you have to clear the cache. You can do it in Admin Panel or in console using:
php bin/magento cache:flushAnitr– Anitr2017年01月17日 07:26:29 +00:00Commented Jan 17, 2017 at 7:26