Using Global Node Modules The Right Way
When using tools like nvm, n or even homebrew you can end up installing multiple verisons of Node. This could mean that when you run npm install -g over time you’ll have the same executible installed in a bunch of different places. See for yourself:
type -a expo-cliDo multiple versions come up?
A Global npmbin
Create a global npmbin: one place to store all of your global dependencies without having to call them with the global flag! This folder will have its own package.json and specific node version. No more node_module bloat, no more linking, it just works.
Creating your bin
Create a new directory under home and cd into it:
mkdir ~/npmbin/ && cd $_Init with package.json. None of the fields really matter, its all local.
yarn init (or npm init)Add ~/npmbin to your path. Open your ~/.bashrc or ~/.zshrc and on a new line:
export PATH="$HOME/npmbin:$PATH"What this does is makes ~/npmbin available to use everywhere. Save & restart your terminal window.
Then navigate back to your ~/npmbin directory and install a module you’d typically use globally (expo-cli or gatsby-cli are two I use a lot):
Don’t use --global or -g! You don’t need to anymore :smile:
npm install `expo-cli`Conveniently Installing Modules
You might think its annoying to have to cd into ~/npmbin every time you want to install something globally. Although it doesn’t happen alot, I still did. I created a simple alias function to make it easier:
yg expo-cli
Think yarn global but call it whatever you’d like!
yg() {
cd $HOME/dotfiles/npmbin
yarn add $@
cd -
}- Cd into
npmbin - add the file that was passed in as an argument
- cd back to wherever you were
Place this inside your ~/.zshrc or ~/.bashrc file and restart your terminal. Give it a go.
