npmé o gerenciador de pacotes nodejs. Portanto, é direcionado a ambientes nodejs, o que geralmente significa projetos nodejs do lado do servidor ou projetos de linha de comando (o próprio bower é um pacote npm). Se você for fazer qualquer coisa com nodejs, usará o npm.
boweré um gerenciador de pacotes que visa projetos web (front-end). Você precisa do npm e do nodejs para instalar o bower e executá-lo, embora os pacotes do bower não se destinem especificamente ao nodejs, mas sim ao ambiente do "navegador".
composeré um gerenciador de dependências voltado para projetos php. Se você está fazendo algo com o symfony (ou o velho php), este é provavelmente o caminho a percorrer
Resumindo:
- fazendo nó? você faz npm
- fazendo php? tente compositor
- javascript de front-end? tente caramanchão
E sim, os arquivos "json" descrevem informações e dependências básicas do pacote. E sim, eles são necessários.
Agora, o que acontece com os READMEs? :-)
[atualização, quatro anos depois]
bowerestá obsoleto e não deve ser mais usado para novos projetos. Em grande parte, ele foi incluído no gerenciamento de dependência de nó (de seu site: "Enquanto o Bower é mantido, recomendamos o uso de Yarn e Webpack ou Parcel para projetos front-end").
yarnsaiu da madeira como um melhor npm(consertando várias npmfalhas), e isso é realmente o que você deve usar agora, já que é o novo padrão de fato se você estiver fazendo desenvolvimento de front-end ou nó. Ele consome o mesmo package.jsonque npm e é quase totalmente compatível com ele.
- Eu não usaria
composer neste momento (porque eu não usaria php), embora pareça ainda estar vivo e popular