Since node.js is the new cool kid on the block, I want to write a really short introduction how to install it on Mac OS X and start playing with it.
Exploring technologies is something I try to fit in my everyday, that’s why I’m choosing the verb playing. This little and quick guide is really more for everyone who has more experience with PHP than with ruby or python. I don’t even want to talk to you ruby on rails people, you know how all this stuff works, shoo!
Not only for node.js, but a powerful tool that every developer on Mac OS should have or have heard of: homebrew. So head on and install it, because it allows you to install node.js with one command (Terminal phobics, don’t worry, it’s short!) and gets you going on setting up your testing environment.
To install node.js on your machine, you simply type:
brew install node
That’s it. You watch a short process of download and build, which has not failed the couple of times I’ve tried it on both Mac OS 10.6 and 10.7, but don’t close that Terminal quite yet.
For running node.js you actually need to run a process in your shell or make something run the process for you. For now, we’ll stick to having the Terminal window open.
How to Node has a very comprehensive guide how to send output to a browser, by making node start an http server and listen for requests. Requests, as in every web capable programming language are important in node.js and you’ll be hearing a lot more about this request object in the future.
So what you don’t need to do is to define a directory, like you know from apache or lighttpd servers. You can create a node project in any folder on your system, go there in a Terminal window and run your .js file with node filename.js, followed by hitting ENTER.
Let’s say we wanted to use the hello world example, we’d shamelessly copy paste the code into our text editor and save it in a folder called nodetests. Now with the Terminal we type something like:
cd nodetests/ and press ENTER node filename.js and press ENTER again
Now we have a running node server on the specified port, that will output Hello World on a specified address. You can see the output by pointing your browser to http://localhost:3000 and it should say: Hello World.
Going back to your editor and changing some lines will have absolutely no effect right now, because node does not check for file changes by default. So even if your file would now output `Hello Moon`, the node server still thinks that it should output `Hello World`, because it was that the last time it checked.
To prevent you from undergoing the horrible task of changing to your Terminal window, pressing
CTRL+C ARROW UP ENTER
every time you make a change you want to preview, there actually is a way to skip that.
Using node-dev instead of node, automatically restarts your server, whenever it notices a file changed. That’s way cooler and feels a lot more like developing PHP suddenly. It’s not bad to feel a little at home when you start on frighteningly seeming complex stuff like node.js.
NPM: the node package manager
NPM is what apt is for debian or gem for ruby. It’s the universal tool for getting stuff and also packing stuff up in neat and reuseable modules.
Taking a look at the amazing list of modules available and also their own repository site, you will quickly understand why you will want to use it.
By simply typing
npm install locomotive
you’ll install an hmvc framework, make it available for your project and also have the frameworks own tools for debugging, running servers or similar at hand.
I have not personally met anyone who actually has developed with node, but I’ve recently infected another developer with it.
Although I have joined the IRC channel, because I was stuck on some typical node.js beginner issues like correct use of callbacks and understanding how to prevent node.js from spawing 84 processes on resizing 18.8MP images with the imagemagick module. If you don’t watch out, you’re going to do more stuff parallel than you actually intend to and definitely more than your Mac Book Pro can handle without crashing (seriously).
Especially spion helped me and actually restructured some of my code for my understanding, which was pretty amazing of him, also looking at the things he actually has published. Kudos to him.