How to learn 90% of Brunch in 8 minutes? Follow the guide!
So, you've installed Node.js and Brunch itself (npm install -g brunch
).
You're probably starving at this point. Let's get straight to the business.
brunch new
helps to init new Brunch project from one of
community-provided skeletons.
The popular "ES6 skeleton" may sound scary, but it's actually very modern and nice.
Let's try to create a new app from it!
Type
$ brunch new proj -s es6
in your shell prompt. Executing the command will:
proj
git://github.com/brunch/with-es6.git
to the dir.
The Git URL is basically full name of our "es6"
skeleton.npm install
to install app dependencies and brunch pluginsAfter the project is created, let's try to build it:
$ brunch build
01 Apr 10:45:30 - info: compiled initialize.js into app.js, copied index.html in 857ms
The app is there, let's take a quick look into the project's structure
README.md
app/
assets/ // Files inside `assets` would be simply copied to `public` dir.
index.html
initialize.js
brunch-config.js // Basic assumptions about the project, like paths & outputs.
node_modules
package.json // Describes which dependencies and Brunch plugins your app uses.
public/ // The "output" Brunch will re-generate on every build.
index.html // This was simply copied from our `app/assets`
app.js // `app.js`, in turn, was generated from `initialize.js`.
app.js.map // Source mappings for simple debugging.
Let's add a few files to our app, then build the app one more time:
$ echo "body {font-family: 'Comic Sans MS'}" > app/main.css
$ echo "console.log('Hello, world')" > app/logger.js
$ brunch build
01 Apr 10:50:10 - info: compiled 3 files into 2 files, copied index.html in 947ms
Let's inspect files in public
to understand what happened at this point:
app.css
simply has content of app/main.css
and nothing elseapp.js
has require definition and contents of both initialize.js
and logger.js
. Each file is wrapped into a JS function, which defines a module. This allows us to do things like require('./logger')
. Indeed, your logger.js
file will not execute without you first requiring it inside initialize.js
, so go ahead and require it in initialize.js
. You can use the require command as follows, require('./logger')
.Executing brunch build
every time seems to take too much effort. Instead, let's just do brunch watch --server
. The watch
would automatically & efficiently rebuild the app on every change. --server
flag would also launch a HTTP server. The default location for the server is http://localhost:3333
, so open this URL in a browser of your choice. You'll see our app and everything which was located in public
directory.
Since the shell console would be busy with brunch watch
command, we'll need to open a new window.
Let's try to add jQuery to our app. Brunch makes the process absolutely effortless.
Execute npm install --save jquery
, while keeping our Brunch watcher running.
You may think that Brunch is too damn smart, but the command alone would not add
jQuery to our app - we'll need to use it somewhere too.
Add the following code anywhere in initialize.js
:
var $ = require('jquery');
console.log('Tasty Brunch, just trying to use jQuery!', $('body'));
Check our tiny web-server at localhost:3333
- and the browser console would
output exactly what you've entered here. jQuery is up and running now.
Let's say you want to try the new fancy ECMAScript 201X thing. Maybe your OCD would be eased by conforming to 66 ESLint rules. It doesn't matter, more than 50 Brunch plugins aim to help with all kinds of crazy cases.
Install Babel plugin by executing npm install --save-dev babel-brunch
.
Hmm...that's exactly the same command from our previous step. Whatever. Let's create the index.js
file with some content:
$ echo 'console.log([1, 2, 3].reduce((s, n) => s + n ** 2))' > app/index.js
Since you've added Babel plugin to the board, Brunch would magically recompile the app and include compiled content of index.js
in the output file. Voila!
Keen to learn the remaining 10%? Check out the advanced guide to Brunch, which also describes using Brunch on a legacy codebase. Happy cooking!