1001Ferramentas
📦Dev

Parser de Especificador NPM

Analisa um especificador de pacote NPM (lodash, @scope/[email protected], github:user/repo) e extrai nome, escopo, versão e tipo (registry/git/url/file).

As formas do especificador de pacote npm

O que se escreve depois do nome do pacote não é só número de versão. O npm aceita faixa, dist-tag, repositório git, URL de tarball, caminho local, atalho de GitHub e alias — e cada forma resolve de maneira diferente na instalação. A página identifica qual delas você tem em mãos e explica o que ela implica.

A distinção mais útil é entre versão exata, faixa e dist-tag. Versão exata trava; faixa deixa o npm escolher no momento da instalação; dist-tag é um nome publicado que aponta para uma versão e pode mudar sem aviso. Há ainda uma ambiguidade real: o npm tenta interpretar o texto como faixa e, se não for faixa válida, tenta como dist-tag — então um erro de digitação em faixa pode virar busca por tag inexistente.

As formas que não passam pelo registro merecem atenção. Repositório git sem ref depois da cerquilha instala o branch padrão, o que significa que a mesma instalação em dois momentos pode trazer código diferente. Caminho com file: cria link simbólico em vez de copiar, então mudança na pasta de origem aparece na hora — ótimo em desenvolvimento, ruim em imagem de contêiner.

Perguntas frequentes

Para que serve o alias com npm:?
Para instalar um pacote sob outro nome, o que resolve dois problemas: usar duas versões da mesma biblioteca no mesmo projeto, e trocar um pacote por um fork sem alterar nenhum import. O nome da dependência é o que você escolhe, e o npm: aponta o pacote real que será baixado.
O atalho usuário/barra/repositório é seguro?
Funciona, mas é forma sem prefixo interpretada como GitHub, e traz os mesmos problemas de qualquer dependência de git: sem ref, não é reprodutível; e o repositório pode desaparecer ou trocar de dono. Em produção, prefira publicar num registro, mesmo privado, a apontar para repositório.
O que o arquivo de lock muda nisso?
Ele fixa a versão que a faixa resolveu na primeira instalação, junto com o hash do conteúdo. Ou seja, faixa larga no manifesto não significa instalação instável — desde que o lock esteja versionado e a instalação use o comando que o respeita, e não o que o atualiza.

Ferramentas Relacionadas