brocessing / kirby-webpack

:muscle: A Kirby CMS starter-kit with modern frontend tools
MIT License
179 stars 23 forks source link
boilerplate browsersync es6 getkirby hmr kirby kirby-cms less livereload php preprocessor sass stylus webpack

logo

kirby-webpack

A Kirby 3 starter-kit with modern frontend tools

License


NOTE : This starter-kit is for Kirby 3. For the Kirby 2 version of this starter-kit, check this branch.





Table of Content



About

Kirby is a file-based CMS. Easy to setup. Easy to use. Flexible as hell.

But it lacks the frontend tools ; especially if you're more a front than a back developper.
Kirby-webpack wraps PHP and Kirby CMS inside a full pre-configured npm + Webpack environnement.



Features



Requirements



Installation

Clone the starterkit and install its dependencies

npm install will also trigger the Kirby Package Manager : Kirby core, panel and plugins will be automatically installed right after an npm installation.

$ git clone https://github.com/brocessing/kirby-webpack my-project
$ cd my-project
$ npm install
:bulb: Before starting your project, it is recommanded to unboil it using brocessing/unboil :

unboil allows you to clean a boilerplate project (files like package.json, readme, git...) to quickly start your own project from it.

$ npm i -g unboil # install unboil globally
$ cd my-project
$ unboil          # use it on your brand new kirby-webpack installation



Project structure

kirby-webpack/
│
├── scripts/
│   # built-in scripts used by Kirby-webpack
│
├── src/           
│   # JS & Less/Sass/Stylus sources to be bundled by Webpack
│
├── www/               
│   # your usual Kirby website folder
│   # this is all you need to deploy to your server
│   │
│   ├── assets/
│   ├── content/
│   ├── site/
│   └── ...
│
├── kirby.config.json
├── main.config.js
└── package.json



Working with Kirby-webpack

Webpack

Using Webpack means that you can now have source files and dependencies for all your JS and CSS assets.

The right way to use Kirby-webpack is to code all your javascript and LESS (or Sass, or Stylus) files in the src/ folder. On npm run build, Webpack will analyze, compile and bundle all your sources into the main www/ Kirby folder.

That means that www/ is the only folder you have to deploy to your server.

Note: you can totally use Kirby as usual by creating your js and/or css files into www/assets/, but you will not benefit from Webpack compilation nor auto-injection. You will however still have livereload capability.

Relative urls in CSS sourcefiles

:warning: If you use relative url in your sass/stylus/less, you had to write them relative to the output of the bundled css file, not the source filepath.

Example
/**
 * Your less source file is 'src/index.less'
 * It will be bundle to 'www/assets/bundle.css'
 * You want to require 'www/assets/images/logo.png' in your less file.
 */

/* GOOD: logo.png is relative to your bundle.css filepath */
body { background: url('images/logo.png'); }

/* WRONG: logo.png doesn't have to be relative to your website root */
body { background: url('assets/images/logo.png'); }

/* WRONG: logo.png doesn't have to be relative to the source file */
body { background: url('../www/assets/images/logo.png'); }


Kirby

Kirby-webpack try to be as least intrusive as possible. That said, there is some minor modifications to your ordinary Kirby config you need to be aware of :

The kirby-webpack plugin

There is a special kirby-webpack Kirby plugin containing all required helpers to make Kirby-webpack working correctly. Don't remove it!

CSS livereload

Use liveCSS() instead of the usual css() to enable the CSS hot-reloading.
Continue to use css() for simple vendor CSS files which don't require hot-reloading.

<?php
-   echo css('assets/bundle.css')
+   echo liveCSS('assets/bundle.css')
?>

Changes to config.localhost.php

These lines are required in config.localhost.php for the dev server to work.

If you configure kirby-webpack to work with a proxy and a vhost, you will have to rename config.localhost.php accordingly to the virtual-host you use.

  if (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && $_SERVER['HTTP_X_FORWARDED_FOR'] === 'webpack') {
    c::set('url', '//' . $_SERVER['HTTP_X_FORWARDED_HOST']);
  }

Bonus: know if Webpack is being used

if (isWebpack()) {
  echo 'Your are viewing the site through the dev server.';
}


Kirby Package Manager

Keeping a Kirby starterkit up-to-date can quickly become tedious, especially if you have a lot of plugins. Working with git submodules may seem like a good idea, but is usually not, as it tends to make your git history harder to keep clean.

Rather than using Kirby CLI, Kirby-webpack comes with its own npm flavored Kirby Package Manager, allowing for a cleaner way to work both in the NodeJS and in the Git environment.

Kirby Package Manager works by keeping a list of all installed Kirby plugins in kirby.config.json. Run npm run kirby:add to download and register a plugin, and npm run kirby:remove to remove and unregister one.

The registered plugins will be added to .gitignore, and updated each time you'll run npm install or npm run kirby:update.

Note: you can also manually edit kirby.config.json as described in "Want a custom starter kit ?".

Note: you can still manually download and install plugins the old way, but Kirby Package Manager won't be able to track them.



List of Kirby-webpack commands

Main

Kirby Package Manager

Additional tools



Want a custom starter kit ?

Fork this repository and build your own starter kit inside www/.
Edit main.config.js and kirby.config.json to customize your Kirby-webpack configuration.


main.config.js

Edit main.config.js to define your favorite CSS preprocessor, dev server options, and to customize your project folder architecture.

Note: Kirby-webpack will automatically update your npm packages to match the CSS preprocessor you defined in main.config.js.


kirby.config.json

Edit kirby.config.json to register your favorite Kirby plugins, and Kirby-webpack will automagically install and update them for you.

Alternatively, use npm run kirby:add to add plugins via an interactive shell.

{
  "modules": {
    "core": "https://github.com/getkirby/kirby.git",
    "plugins": {
      "kirby-color": "https://github.com/TimOetting/kirby-color.git"
    }
  }
}

Note: the left-hand value corresponds to the name of the plugin, not the name of its git repository.



Contribute

Issues

Feel free to submit any issue or request.

Pull Request

  1. Fork the repo on GitHub
  2. Clone the project to your own machine
  3. Commit changes to your own branch
  4. Push your work back up to your fork
  5. Submit a Pull request so that we review your changes

Be sure to merge the latest from upstream before making a pull request.



License

MIT.