JavaScript is one of the most popular programming languages in the world. Because it’s built into most web browsers, programmers and web designers can use JavaScript to add interactive features to websites that reach billions of people. But in the past couple of years, JavaScript has started to play a larger role outside of the browser, due in large part to Node.js.

Node.js is a tool for building fast network applications. It’s known as a “JavaScript runtime environment” which simply means it lets you write JavaScript code that can run on your computer free of any web browser. Node.js is used to create fast web servers by companies like Walmart, eBay and Netflix.

But because Node.js can be used on your desktop computer, programmers have created useful Node-based tools that help with the process of building web sites. For example, Grunt is a popular tool used to automate common tasks like compiling Sass files to CSS, making JavaScript files smaller so they load in less time, and compressing images to smaller file size. While these tools run through the Node.js environment, you’ll use another tool, NPM, to install them. NPM is what’s called a “package manager.” NPM makes installing a tool like Grunt as easy as npm install -g grunt-cli.

But before you can use Node.js or NPM you need to install them — while the NodeJS website includes an installer, there’s a better way to install them on a Mac. In this article, I’ll take you through the process of installing Node.js and NPM on a Mac using Homebrew. In another article, I’ll show you Windows users how to install them on the Windows operating system.

Prerequisites

Before you install Node.js and NPM you’ll first need to have some familiarity with the Mac Terminal application. Terminal lets you dig into the underbelly of the operating system and issue text commands to your computer. You’ll need to use Terminal (or a similar application like iTerm) to not only install Node.js but also to use it and NPM.

Before you can install Node, you’ll need to install two other applications. Fortunately, once you’ve got these on your machine, installing Node takes just a few minutes.

XCode. Apple’s XCode development software is used to build Mac and iOS apps, but it also includes the tools you need to compile software for use on your Mac. XCode is free and you can find it in the Apple App Store.

Homebrew. Homebrew is a package manager for the Mac — it makes installing most open source sofware (like Node) as simple as writing brew install node. You can learn more about Homebrew at the Homebrew website. To install Homebrew just open Terminal and type ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)". You’ll see messages in the Terminal explaining what you need to do to complete the installation process.

Why Homebrew?

Observant readers will notice in the screenshot above that there’s an installer for NodeJS. You can download it directly from NodeJS.org. I recommend Homebrew over that installer for a few reasons:

When installing Node via the installer, you have to use the sudo command to make sure it installs properly (there is a workaround for this, but it’s complicated). sudo lets the installer place files in areas of your file system that are only accessible to administrators. One nice thing about Homebrew is that it doesn’t require access to administrator-only areas of your computer in order to install NodeJS (or any other package). This is a safer approach as it makes sure that any package you install with Homebrew can’t wreak havoc on your computer.

After installing Node via the installer you have to add the path to the node executable to your system $PATH. This involves mucking around with your shell login file. For experienced Terminal users or Unix-people this isn’t a big deal, but for those new to the command line that step can be daunting. Although the Homebrew method involves installing several different pieces of software, it’s generally just a simple process of point-click-and-wait. It takes a bit longer this way but there’s less room for error.

Homebrew is a great tool for web developers. First, it makes removing Node very easy (otherwise you have to crawl through your file system and delete a bunch of files manually). Second, it greatly simplfies the installation of other useful packages like Git, Ruby, or the very useful wget utility.

Installation

Installing Node.js and NPM is pretty straightforward using Homebrew. Homebrew handles downloading, unpacking and installing Node and NPM on your system. The whole process (after you have XCode and Homebrew installed) should only take you a few minutes.

Open the Terminal app and type brew install node.

Sit back and wait. Homebrew downloads some files and installs them. And that’s it.

To make sure you have Node and NPM installed, run two simple commands to see what version of each is installed:

To see if Node is installed, type node -v in Terminal. This should print the version number so you’ll see something like this v0.10.31.

To see if NPM is installed, type npm -v in Terminal. This should print the version number so you’ll see something like this 1.4.27

How to Update Node and NPM

New versions of Node and NPM come out frequently. You can use Homebrew to update the software it installs.

Make sure Homebrew has the latest version of the Node package. In Terminal type brew update

Upgrade Node: brew upgrade node

How to Uninstall Node and NPM

You can use Homebrew to uninstall packages that it installed: brew uninstall node

With Node.js and NPM installed you’ll soon be able to take advantage of the huge world of NPM modules that can help with a wide variety of tasks both on the web server and on your desktop (or laptop) machine. The NPM site lists all of the official Node packages making it easy to make the choice. Have fun and check out my current courses at Treehouse.

If you’re looking to take your JavaScript coding to another level, check out our Techdegree in Full Stack JavaScript. Our faculty of tech professionals guide learners like you from mastering the fundamentals of JS to polishing the skills of a job-ready developer. Try our program out with a free seven-day trial today.

100 Comments

Paul D Gehrke

‘brew install node’ installed node 10.1
‘npm -v’ was 5.6 although 6.01 is the most recent
‘brew upgrade npm’ did not upgrade to latest version of npm
‘npm install -g npm ‘ Will upgrade to the latest version of npm
Hope this helps someone else!

i am getting error when i checking the version npm -v
ERROR: npm is known not to run on Node.js v0.10.40
You’ll need to upgrade to a newer version in order to use this
version of npm. Supported versions are 4, 6, 7, 8, 9. You can find the
latest version at https://nodejs.org/

What confuses me is that I have npm all set up in some projects at work and it works fine. However, I just downloaded a new project and when I run “npm -v” in that project, I get “npm: command not found”. I can’t seem to find any docs on installing node per project. They all seem to be global, including this one.

So how is it npm works in one project but not another? And if there is a way to install it per project, how is that done?

You need node.js and npm installed on your home machine, too. “Command not found” means it’s not installed. Follow the instructions above, and you’ll have everything you need to destroy your free time with work stuff.

You need to install NodeJS globally. NPM comes with it and that is how you’re going to be building your project dependancies. Now if you don’t want to install all those packages that your project requires, then you’re going to want to have your JSON file call them up as devDependancies. Take a look at the link below, it might explain it better than I can.

I’m having difficulties installing homebrew. It keeps asking for a password before it will finish installing. My Mac didn’t have a password and just pressing enter didn’t work. So I created a root password and now I get ‘Sorry, try again’.
Any help on this please?

This is normally the password you use to log into your Mac or your username’s password. You might have your Mac setup to automatically log you in without entering in a password. If you don’t know what the password is to your user account, go to System Preferences -> Users & Groups, and change your password. Then use this password when it prompts you while installing brew.

Installing using brew is not working for me because it needs permission to write to /usr level directories. I cannot run brew as a superuser because it is not allowed. So using brew is not an option to install node on MAC.

I simply down loaded the Node package from https://nodejs.org/en/download/
and installed the node & npm without any problems. I tried to use brew for two days to install and it does not work.

Thank you for this, homebrew wasn’t working for me either. Downloading the package from https://nodejs.org/en/download and installing it was much easier than the steps in this article. Took less than 5 minutes to install. Plus it only installs what I need (node and npm) vs stuff I don’t need (homebrew, grunt).

I’d just like to add for other people having a bit of difficulty trying to install homebrew that you need to download Xcode to your machine and run it after it’s installed so that when you run the install for homebrew it can complete.

I think this tutorial is very informative, but I can’t understand why so many writers ignore the basics of good online communication. Your gray text on a gray background “is” readable, but not without effort. Is this a design decision? Why not make the text black to increase contrast and readability? And, your links, in light blue, are even worse—I cannot read them on my high-resolution 30″ monitor.

I am amazed that you ignore these communications basics, when you purport to be a communications company.

I must disagree on what you say, because I think that the contrast from background to the typo is just fine.
The problem is, if you choose a too strong contrast it will be very difficult for the eyes to read a lot of text.

To better understand what I am meaning I advice you to take a piece of paper which is intended for laserprinting/xeroxing. But don’t take the environmental greyish paper but the one that is super white. Now print in the size of 9 to 11 pt some text in a robust font like times, garamond or helvetica. You will see that the words start to flicker in your eyes.

Now print the same text on a greyish environmental piece of paper and you will notice that the text will be much more readable and your eyes will not start getting tired that fast.

This is due to reduced contrast between text and background. The problem is that in our eyes there is a contrast enriching mechanism working if two adjacted photoreceptor cells are receiving very contrasting amounts of light. The one that receives a lot of light uses up the visual purpur (which is needed for the cells to create the light perceprion) of it’s neighboring photoreceptors thus making the perception of those receptors that receive very little light even darker. And if this contrast just gets to strong our eye is just not capable to handle this contrast any more and the vision gets blurry/flickering.

If you look at high quality thread bound reading books without pictures (a novel for example) you will notice that it mostly is printed on natural colored paper and that is not because the printer wanted to save money, in fact this naturally colored paper is way more expensive as the highly bleached super white xerox paper you get at the supermarket.

Now look at the contrast between black and white on an average computer screen and you will notice that the contrast is even stronger than on super white copying paper. Therefore it is strongly recommended to either brighten up the typo or dimming down the white of the background (or do both). You can even colour it a bit as long as it does not get too saturated.

Hey there just wanted to give you a brief heads up and let
you know a few of the images aren’t loading properly. I’m not sure why but I think its a linking issue.
I’ve tried it in two different web browsers and both show the same outcome.

Outstanding tutorial on node.js et al. I wish I had stumbled upon your site a few weeks ago when I ‘tried’ installing the ‘other’ way. I ended up following your instructions to a “T” after I removed node.js…it worked like a charm. I especially like the fact that I now have Homebrew which I knew existed, just didn’t know the reason why.

I’m going to hunt around your site to see what else I can learn. Possibly find a course that i can take as well. Thanks again for the tutorial…I’m off to play in node.js and the like!

I’m noticing that whenever I use Homebrew to install Node/NPM, it installs *hundreds* of node modules. So, when I scaffold up a project with Yeoman, the node_modules folder contains hundreds of node modules.

I admit I’m not sure if this is Homebrew’s doing, but it seems like it.

To support and at the same time, challenge the idea of installing node via homebrew.

I initially did the install via the installer pkg. But I am using a non-admin user to do all my stuffs, developments and so. So I got stuck into even more challenging issues with the permissions. So I decided to remove the packaged install and re-install via homebrew.

It went like a charm.

Now, a month later, I want to install ghost and kickstart a project. However, ghost supports Node only up to v. 4.2 and the current node version is 5.1

I’ve been using npm and node for many things in the last month and installed a bunch of things using npm.

Because I used homebrew in the first (well, second actually) place, I can easily uninstall node via homebrew, install nvm via homebrew and install the node versions I need via nvm.

Notice at the end, it shows /usr/local/bin like the warning mentioned. Should there be a colon for slash after that (should there be a slash after every ending folder name)? If this path looks funky, it may be because I was trying to fix a goof from a node-v4.2.1.pkg installation. If there is anything that I should now remove since I am going through the Homebrew installation of Node, please let me know.

Thanks For sharing this. But I got some problem, although Node and NPM installed I did uninstall and again installed for some reasons. After that when I am checking
node -v
v7.5.0
But when checking I am getting this.
npm -v
-bash: npm: command not found

Can someone help me with this. I guess there is some problem with symlink, but not sure how to deal with it.

Good question. Yes, there is an installer package for Node. There are a couple of reasons why I recommend Homebrew instead:

1. When installing Node via the installer, you have to use the sudo command to make sure it installs property. This lets the installer place files in areas of your file system that are only accessible to administrators. One nice thing about Homebrew is that it when it installs packages it doesn’t require access to administrator-only areas of your computer. This is a safer approach as it makes sure that any package you install with Homebrew can’t wreck havoc on your computer.

2. After installing Node via the installer you have to add the path to the node executable to your system $PATH. This involves mucking around with your shell login file. For experience Terminal uses or Unix-people this isn’t a big deal, but for those new to the command line that step can be daunting. Although the Homebrew method involves installing a several different pieces of software, it’s generally just point-click-and-wait. It takes a bit longer this way but there’s less room for error.

3. Homebrew is a great tool for web developers. First, it makes removing Node very easy (otherwise you have to crawl through your file system and delete a bunch of files manually — at least you do at this point). Second, it makes installing other useful packages easy like Git, Ruby, or the very useful wget utility.

I’ve updated the article to include these ideas. Thanks for the feedback!

Just want to second (or third?) that installing Node, NPM, Mongo, and so on, from Homebrew is preferred for most developer installations. Makes managing versions easier, updating, removing, and so on. Also, the biggest benefit for me is that you don’t need to muck with permissions when running applications, installing packages with NPM, and sometimes even building… Which can require sudo to work properly, something that can get annoying when you’re managing your application’s dependencies.

Each is designed by our faculty of tech professionals to guide even a coding beginner to becoming a job-ready software developer armed with a professional portfolio of real-world projects. Try one out today with our free seven-day trial, and see if software development is for you.