This is how I got grunt running with the twbs/bootstrap plugin to automatically copy the CSS, JS and Fonts into my CakePHP 3 development environment.
I did this on MacBookPro OSX 10.11.5. But this applies to Linux too.
If anyone has better suggestions as to how this could be accomplished easier. I am open to them
# change to your home dir cd ~/ # use composer to install cakephp3 composer create-project --prefer-dist cakephp/app c3twbs # cd to your cake root: cd c3twbs # use composer again to install twitter bootstrap composer require twbs/bootstrap # change to the bootstrap dir cd vendor/twbs/bootstrap # install the local node components # you need node.js to be able to run these commands # google for how to install it. # hint: brew install node npm npm install # install the ruby gem because of the jekyll -v error gem install jekyll # run grunt and it will build all the bootstrap components and place them in # vendor/twbs/bootstrap/dist grunt
You don't want them to just be in c3twbs/vendor/twbs/bootstrap/dist you also want your files to be copied or compiled to c3twbs/webroot/{js|css|fonts}
So you need to modify your Gruntfile.js to do this. I have added some new commands with a _cake suffix to do this:
diff Gruntfile.orig Gruntfile.js
138a139,142
> core_cake: {
> src: '<%= concat.bootstrap.dest %>',
> dest: '../../../webroot/js/<%= pkg.name %>.min.js'
> },
236a241,248
> minifyCore_cake: {
> src: 'dist/css/<%= pkg.name %>.css',
> dest: '../../../webroot/css/<%= pkg.name %>.min.css'
> },
> minifyTheme_cake: {
> src: 'dist/css/<%= pkg.name %>-theme.css',
> dest: '../../../webroot/css/<%= pkg.name %>-theme.min.css'
> },
282a295,299
> fonts_cake: {
> expand: true,
> src: 'fonts/*',
> dest: '../../../webroot/'
> },
371c388,389
< tasks: 'less'
---
> //tasks: 'less'
> tasks: 'dist'
476c494
< grunt.registerTask('dist-js', ['concat', 'uglify:core', 'commonjs']);
---
> grunt.registerTask('dist-js', ['concat', 'uglify:core', 'uglify:core_cake', 'commonjs']);
480c498,500
< grunt.registerTask('dist-css', ['less-compile', 'autoprefixer:core', 'autoprefixer:theme', 'csscomb:dist', 'cssmin:minifyCore', 'cssmin:minifyTheme']);
---
> grunt.registerTask('dist-css', ['less-compile', 'autoprefixer:core', 'autoprefixer:theme', 'csscomb:dist', 'cssmin:minifyCore', 'cssmin:minifyTheme',
> 'cssmin:minifyCore_cake', 'cssmin:minifyTheme_cake'
> ]);
483c503
< grunt.registerTask('dist', ['clean:dist', 'dist-css', 'copy:fonts', 'dist-js']);
---
> grunt.registerTask('dist', ['clean:dist', 'dist-css', 'copy:fonts', 'copy:fonts_cake', 'dist-js']);
Here is a link to the complete Gruntfile.js Gruntfile
Now when you change to the twbs/bootstrap dir and run grunt watch and change a *.less file it will recompile all your stuff and plonk it in the correct c3twbs/webroot/ css js and fonts folders.
cd ~/c3twbs/vendor/twbs/bootstrap grunt watch
Be sure to include the correct bootstrap files into your view:
// src/Templates/Layout/default.ctp
<html>
<head>
<?php $this->Html->script([
'vendor/jquery-1.12.0.min',
'plugins',
'main',
'bootstrap.min'
], ['block' => 'end_script']); ?>
<?=
$this->Html->css([
// 'normalize', // already in bootstrap
'main',
'bootstrap.min',
//'bootstrap-theme.min', // It's built but I don't use it. Should I?
'clam'
])
?>
<?= $this->fetch('css') ?>
</head>
<!-- # content here # -->
<body>
<?= $this->fetch('end_script'); ?>
<?= $this->fetch('from_view'); ?>
</body>
</html>
Refs:
http://gruntjs.com/getting-started
http://getbootstrap.com/getting-started/
https://getcomposer.org/


0 Comments