Dan Dean

Installing Node, NPM and Express on OSX from Scratch

Apr 01, 2011

Prerequisites

You need to have Git installed. By far, the easiest way to do this is with Homebrew. Follow these Homebrew Installation Instructions.

Now that you’ve got Homebrew installed, use it to install Git from within your Terminal:

$ brew install git

Installing Node

If you don’t have Git installed, use Homebrew to install that first.

Here’s a basic installation guide for Node.

Getting Node’s source code

If you don’t already have a place to store external source code, put it somewhere usefuls, like a “src” directory in your home folder:

$ mkdir ~/src

Now that we’ve got a place to put it, let’s download Node:

$ cd ~/src
$ git clone https://github.com/joyent/node.git
$ cd node

Building Node

You’ll want the latest stable version. Stable version are use even numbers, while unstable dev versions use odd. At the time of this writing, the latest stable release is 0.4.7, so let’s checkout that tag before building:

$ git checkout v0.4.7   # you'll get a note about a detached HEAD state.
$ export JOBS=2         # optional, sets number of parallel commands.
$ mkdir ~/local
$ ./configure --prefix=$HOME/local/node
$ make
$ make install

Telling your system where to find Node

We’ve got to add the node bin folder to your path so that you can easily use node from the command line. Open up your .bash_profile and add Node’s path to your PATH.

$ nano ~/.bash_profile

If you already have a line that starts with export PATH=, just add Node’s path to the beginning. For example this:

export PATH=/usr/local/bin:$PATH

would become:

export PATH=$HOME/local/node/bin:/usr/local/bin:$PATH

If you don’t already have a PATH export declared, just add this to the file and save:

export PATH=$HOME/local/node/bin:$PATH

Testing your Node installation

To make sure this all worked as expected, open up a new Terminal window and run:

$ node -v
> v0.4.7

Success!

Installing NPM

Now, I’m guessing you’d like to install some Node programs, like Express or something like that. EASY! NPM is incredibly easy to install:

$ curl http://npmjs.org/install.sh | sh

This should print out a bunch of stuff, ending in It worked. There may also be a single npm WARN Not installed in blah blah blah... line – don’t worry about it.

Testing your NPM installation

Again, just open a new Terminal window at run:

$ npm -v
> 1.0.1rc4

Another success!

Bash Completion

Once incredible helpful feature of NPM is that implements Bash completion, which makes using NPM quite a bit easier at times. To enable this you’ve got to source NPM’s completion file into your .bash_profile. Open .bash_profile up again, and add this to it:

source ~/local/node/lib/node_modules/npm/lib/utils/completion.sh

Installing Express

Now that we’ve got NPM installed, we can use that to install all the Node.js goodness we can get our grubby little hands on, including Express!

NPM 1.0 is more more opinionated than earlier releases – instead of installing modules globally by default, modules are installed at the project-level. Command-line tools, on the other hand, can be installed globally.

The express Command Line Tool

Express is both a project module, and a command line tool, so we’re going to install it in both places. Let’s start by installing it globally:

$ npm install -g express

Now that we’ve got our express command-line tool, let’s use that to create an Express application:

$ mkdir ~/Sites/bitchin-express-app
$ cd ~/Sites/bitchin-express-app
$ express -s -t jade

Done!

Dependency Management

Next we need to specify our application’s dependencies. NPM gives us a clean and maintainable way to do this with the “package.json” file. Create this by running npm init from with the root of your project, and just follow the prompts:

$ npm init

When you’re done with that, add your dependency declarations to the file. Express and Jade are both dependencies for me. This is what my final “package.json” looks like:

{
  "name": "bitchin-express-app",
  "description": "My Bitchin' Express App",
  "version": "0.0.0",
  "repository": {
    "url": ""
  },
  "author": "Dan Dean <me@dandean.com> (http://dandean.com)",
  "directories": {
    "lib": "."
  },
  "scripts": {
    "test": "expresso"
  },
  "engines": {
    "node": ">= 0.4.7 < 0.5.0"
  },
  "dependencies": {
    "express": ">= 2.0.0 < 3.0.0",
    "jade": "*"
  }
}

Dependency management is one of NPM’s excellent features. We can automatically install all of our application dependencies by simply asking NPM to take care of it. From within your project folder run:

$ npm install

You should notice that your project now has a “node_modules” folder. Inside that you’ll see an “express” folder, which contains the Express framework module for use just with your new application.

Running Your Application

We’ve got to create a couple more little files before we’re ready to go: our “layout” and “index” files.

$ touch views/layout.jade views/index.jade

You’ll notice that back when we created our application we passed the -t jade argument to express. This configured our app to use the Jade templating engine.

Open up “views/layout.jade” and paste this into it:

!!!
html
  head
    title Hell's Yeah.
    link(rel="stylesheet", href="/stylesheets/style.css")
  body!= body

And paste this into “views/index.jade”:

h1 This is a Bitchin' Web Applications!
p Am I right?    

Now all we have to do is start our fucking rad, Bitchin’ application! From the root of your project run this, the open the http://localhost:3000 in a browser:

$ node app.js
> Express server listening on port 3000

In Conclusion

Hopefully this introduction is enough to get you up and running. There’s a whole lot going on in the community. Keep up to date by following the Node blog. If you want to explore the many modules available for use in your applications, poke around the NPM Module Registry.

blog comments powered by Disqus