163

So I can't get to install npm in alpine linux. I thought perhaps I can just do a apk add npm but apparently apk search npm returns nothing, even after a apk update. I'm experimenting with all this from the nginx:alpine docker image, i.e. docker run -it nginx:alpine /bin/sh

Edit 1: I can see how the nodejs:alpine dockerfile builds node, but I don't understand how it builds npm

Edit 2: now that I know that npm gets installed with nodejs on alpine, and just for clarification, the reason this wasn't evident to me at first is that on ubuntu 14.04 a sudo apt-get install nodejs would still require a sudo apt-get install npm (which installs development packages e.g. gcc)

Shadi
  • 1,875
  • 3
  • 10
  • 10

9 Answers9

205

I had an issue with the apk manager.

The package nodejs is no longer installing NPM (see pkgs.alpinelinux.org) You have to install nodejs-npm

apk add --update nodejs nodejs-npm
Panthro
  • 103
  • 3
Faisal HUSSAIN
  • 2,151
  • 2
  • 8
  • 2
  • 3
    I do not understand it. Npm should be the core dependency of node, npm install npm@latest might be impacted by the node version itself so they would not be compatible... – dmi3y May 30 '17 at 19:47
  • 6
    This should be the accepted answer with the latest alpine image. npm was not installed for me with just nodejs – kevinc Jul 29 '17 at 15:35
  • 1
    Agreed, this is _normally_ a dependency, but if you're installing nodejs manually (I was installing it from the 'edge' repo as well because as of now 6.7 is deprecated) then you need to install nodejs-npm separately Here's what I ran: apk add nodejs=6.11.2-r0 nodejs-npm=6.11.2-r0 --update-cache --repository http://dl-cdn.alpinelinux.org/alpine/edge/main/ --allow-untrusted – Anton Babushkin Aug 22 '17 at 23:53
  • 8
    Side question: while this answer works just fine, I can't seem to find `nodejs-npm` on https://pkgs.alpinelinux.org/packages. There is `npm` package which also does the job. Is it some kind of alias? – Tad Lispy Jul 25 '18 at 14:28
  • 1
    the correct answer is the correct answer – Stephen Mar 29 '20 at 21:58
  • 4
    nodejs-npm is no longer available, now it's just "npm" https://pkgs.alpinelinux.org/package/v3.14/main/x86_64/npm – BotanMan Jul 07 '21 at 09:33
190

For the recent versions of Alpine (v3.8+) the correct way to install nodejs with npm is:

apk add --update nodejs npm

However, npm package depends on nodejs, so you can do:

apk add --update npm

Note: since Alpine 3.8 there is no nodejs-npm package.

Ruslan Isay
  • 2,016
  • 1
  • 7
  • 3
31

I could be wrong, but I think npm is actually a dependency of nodejs.

I've never seen any flavor of package manager install npm alone. Always seems to come packaged with yum install nodejs, or apt-get install nodejs, or apk add --update nodejs.

Kamil Maciorowski
  • 69,815
  • 22
  • 136
  • 202
Joseph Roberts
  • 427
  • 5
  • 3
9

apk update && apk add nodejs installed the npm binary for me.

John Delaney
  • 91
  • 1
  • 1
5

The issue here is a recent one and is due to changes in Alpine's package repositories between v3.5 and v3.6 or edge.

In v3.5 nodejs included npm In v3.6 nodesjs does not include npm and the new nodejs-npm package exists.

See here for Alpine packages. To see what version of packages you are pulling from look at the contents of /etc/apk/repositories

Peter
  • 51
  • 1
  • 1
3

npm comes hand in hand with nodejs. In the case you cant install node with apk add nodejs, you need fix that first. Step 1 - do you have the community repo added to your /etc/apk/repositories list? If not, it is very useful to do so. Further details: https://wiki.alpinelinux.org/wiki/Enable_Community_Repository

vizmi
  • 139
  • 2
3

I could successfully install nodejs and npm in alpine Linux with the below commands. Added benefit for this method is we can choose different node version with nvm

apk add -U curl bash ca-certificates openssl ncurses coreutils python2 make gcc g++ libgcc linux-headers grep util-linux binutils findutils

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash

export NVM_DIR="$HOME/.nvm"

[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"

nvm install -s <version>

For reference visit here

Reddy Lutonadio
  • 17,120
  • 4
  • 14
  • 35
alex devassy
  • 131
  • 2
2

I have just had to this and can confirm that npm is not a dependency of node.js (at least right now on alpine) and must be installed seperately

i.e apk add --update npm

0xsegfault
  • 121
  • 3
0

I needed latest/current node (v20 at time of writing), but right now I only see node v18 on https://pkgs.alpinelinux.org/packages?name=nodejs&branch=edge&repo=&arch=&maintainer= screenshot of the link

However, digging around nodejs.org download options, I found this:

apk add --update nodejs-current npm

screenshot of nodejs.org

NOTE: nodejs-current doesn't seem to include npm, so I needed to add npm to end of the command.

Devin Rhode
  • 128
  • 1
  • 1
  • 9