LearnHow to Install Node.js and NPM on a Mac

Dave McFarland
writes on October 8, 2014

Share with your friends










Submit

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 web sites 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.

  1. 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.
  2. 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:

  1. 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.
  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 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.
  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). 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.

  1. Open the Terminal app and type brew install node.
  2. 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

node-install1

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.

  1. Make sure Homebrew has the latest version of the Node package. In Terminal type brew update
  2. 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.

45 Responses to “How to Install Node.js and NPM on a Mac”

  1. it was so useful for me, but i have a question: where is node installed folder?! where i must make my project?
    thanks.

  2. it is incredibly wonderful to read something – anything – about web development in coherent English. I was beginning to wonder if my mind was going

  3. Lovely tutorial thank you.

  4. Schwarz Crepsley on July 29, 2016 at 2:25 am said:

    Great easy tute, thank you!

  5. Kudos man !!! The only sensible Explanation on web i came across for this question …

  6. Revati on July 7, 2016 at 9:57 pm said:

    Super Duper Helpful ! 😀

  7. All tech documentations should be this good. I am just reading heading to heading and bold words and voila I am done..

  8. Super helpful. Thanks!!

  9. 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.

    • Not to downplay your experience (I agree web design should be inclusive) but on my monitor and with my eyes, there is a high contrast between shades of gray, white, and blue, and it is easy to read.

  10. Received the following error when I tried to install node via home-brew:
    Warning: The post-install step did not complete successfully

    Turns out I had installed nodejs and bower previously, and some remnants of that install were blocking the nodejs post-install script.

    To resolve:
    $ sudo rm -rf /usr/local/lib/node_modules
    $ brew postinstall node

  11. Thanks for writing this.

  12. `brew install node` does not install npm. I get an error: “npm: command not found”

  13. 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.

  14. Kamran Aslam on March 6, 2016 at 11:40 am said:

    How to uninstall and reinstall node on mac? I think i have some issue with my node 🙁 i want to uninstall the node completely and re-install it once again.

    Thanks,

    Kam

  15. I am trying to install nodeJS and I cannot install Xcode on my work computer because I am using OSX 10.9. Can I install NodeJS without Xcode?

  16. Andrew Pena on February 21, 2016 at 8:27 pm said:

    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!

    • Faye Bridge on February 22, 2016 at 1:30 am said:

      Hi Andrew! That’s great to hear. If you’re interested in browsing through all of the courses we have available, check out of Library. We hope you find something to enjoy learning! 🙂

  17. James Gill (@IamJamesGill) on January 22, 2016 at 11:20 am said:

    Dave,

    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.

  18. Thanks, very useful !

  19. I disapprove of installing Node via Homebrew. Because many packages are installed using the npm commands. Assign own path of Homebrew for Node and npm, and this is a problem most of the time.

  20. 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.

    Makes sense, no?

    Actually, with node, nvm is the the way to go.

  21. I had a typo in my first post. It should say ‘Should there be a colon OR slash after that…’ instead of ‘colon FOR slash’.

  22. Thanks for the instructions. I’m new to this, so I don’t know what is wrong. I got this warning from the Homebrew installation…

    Warning: /usr/local/bin is not in your PATH.

    Here is my path as displayed from ‘echo $PATH’ (where ‘me’ is my user name).

    “/Users/me/:/Users/me/bin:/usr/bin:/bin/:/usr/sbin:/sbin:/usr/local/bin”

    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!

  23. Zachary Hale on October 16, 2015 at 6:55 pm said:

    This was seriously the simplest install I’ve ever done…..of anything.

  24. George Battelle on October 8, 2015 at 4:58 am said:

    I fixed my problem by running:
    “brew doctor”
    which told me how to prune some stray links
    and suggested I change ownership to:
    “sudo chown -R /usr/local
    Repeating:
    “brew install node”
    then announced working versions with:
    “node -v”
    “npm -v”

  25. Error: An unexpected error occurred during the `brew link` step
    The formula built, but is not symlinked into /usr/local
    File exists – /usr/local/lib

    This happens when i try to execute brew install node

    • George Battelle on October 8, 2015 at 2:56 am said:

      Wow. A similar problem happened with me using Homebrew.
      Unexpected error occurred during the ‘brew link’ step.
      The formula built, but is not symlinked into /usr/local
      Permission denied – usr/local/etc

  26. Is there a way to install a specific (previous) version of Node with HomeBrew?
    Great Article!
    Thanks

  27. How to install Node.js on a Debian-based distro:
    $ sudo apt-get install npm
    $ sudo ln -s /usr/bin/nodejs /usr/bin/node

  28. Homebrew is a great tool but just installing Node with its installer is much simpler, and sudo shouldn’t be a problem with developers on their development machine.

  29. Wish I had read this the day before I installed node instead of the day after.

    Is there a reliable way to uninstall node and npm from OS X Mavericks if I installed using the NodeJS.org installer?

  30. Anonymous on October 10, 2014 at 3:14 am said:

    Hey guys, when are you releasing courses on node ??

  31. Happy to see you guys start with node

  32. Honestly I recommend using the installer on the node.js home page. I use HomeBrew for everything else but I find node to be finicky when installed with HomeBrew.

    • Dave McFarland on October 9, 2014 at 9:36 am said:

      Hi Damian

      That’s interesting. I’d love to hear about your experience with Homebrew and Node. What problems have you run into?

  33. I don’t get it. Why not just install it with the pkg from the nodejs.org website?

    http://nodejs.org/dist/v0.10.32/node-v0.10.32.pkg?

    • Seems like this would be less hassle than what the article suggests.

    • Dave McFarland on October 8, 2014 at 5:14 pm said:

      Hi Paolo,

      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.

        I followed these instructions to completely remove Node and NPM, and then re-installed via homebrew: http://benznext.com/completely-uninstall-node-js-from-mac-os-x/

Leave a Reply

Learn to code with Treehouse

Start your 14 day free trial today and get access to hundreds of video courses in web development, design and business!

Learn more