Hoje, na quinta parte da tradução do manual Node.js., concluiremos a análise dos recursos do npm, em particular, abordaremos problemas como descobrir versões instaladas de pacotes npm, instalar versões antigas de pacotes, atualizar versões antigas, atualizar dependências, desinstalação local e global de pacotes. Aqui falamos sobre npx.

[Aconselhamos a ler] Outras partes do cicloParte 1:
Informações gerais e introduçãoParte 2:
JavaScript, V8, alguns truques de desenvolvimentoParte 3:
Hospedagem, REPL, trabalho com o console, módulosParte 4:
arquivos npm, package.json e package-lock.jsonParte 5:
npm e npxParte 6:
loop de eventos, pilha de chamadas, temporizadoresParte 7:
Programação assíncronaParte 8:
Guia Node.js, Parte 8: Protocolos HTTP e WebSocketParte 9:
Guia Node.js, parte 9: trabalhando com o sistema de arquivosParte 10:
Guia do Node.js, Parte 10: Módulos padrão, fluxos, bancos de dados, NODE_ENVPDF completo do Guia Node.js. Descobrindo versões dos pacotes npm instalados
Para descobrir as versões de todos os pacotes npm instalados na pasta do projeto, incluindo suas dependências, execute o seguinte comando:
npm list
Como resultado, por exemplo, pode resultar o seguinte:
> npm list /Users/flavio/dev/node/cowsay └─┬ cowsay@1.3.1 ├── get-stdin@5.0.1 ├─┬ optimist@0.6.1 │ ├── minimist@0.0.10 │ └── wordwrap@0.0.3 ├─┬ string-width@2.1.1 │ ├── is-fullwidth-code-point@2.0.0 │ └─┬ strip-ansi@4.0.0 │ └── ansi-regex@3.0.0 └── strip-eof@1.0.0
Você pode descobrir o mesmo observando o
package-lock.json
projeto, mas a estrutura em árvore que o comando acima exibe é mais conveniente para exibição.
Para obter uma lista semelhante de pacotes instalados globalmente, você pode usar o seguinte comando:
npm list -g
Você pode exibir apenas informações sobre pacotes locais de nível superior (ou seja, aqueles que você instalou e listados em
package.json
) da seguinte maneira:
npm list
Como resultado, se, por exemplo, você instalou apenas o pacote cowsay, o seguinte será exibido:
> npm list
Para descobrir a versão de um pacote específico, use o seguinte comando:
npm list cowsay
Como resultado de sua implementação, obtemos aproximadamente o seguinte:
> npm list cowsay /Users/flavio/dev/node/cowsay └── cowsay@1.3.1
Este comando também é adequado para descobrir as versões de dependência dos pacotes que você instalou. Nesse caso, o nome do pacote de dependência atua como o nome do pacote passado para ele e a saída do comando será semelhante a esta:
> npm list minimist /Users/flavio/dev/node/cowsay └─┬ cowsay@1.3.1 └─┬ optimist@0.6.1 └── minimist@0.0.10
Uma entrada sobre o pacote de dependência nessa estrutura será destacada.
Se você deseja saber qual é o número da versão mais recente de um pacote disponível no repositório npm, será necessário um comando do seguinte formato:
npm view [package_name] version
Em resposta, ela emite o número da versão do pacote:
> npm view cowsay version 1.3.1
Instalando versões antigas dos pacotes npm
A instalação de uma versão antiga do pacote npm pode ser necessária para solucionar problemas de compatibilidade. Você pode instalar a versão exigida do pacote a partir do npm usando a seguinte construção:
npm install <package>@<version>
No caso do pacote cowsay que estamos usando como exemplo, o
install cowsay
instalará sua versão mais recente (1.3.1 no momento desta redação). Se você precisar instalar sua versão 1.2.0, use este comando:
npm install cowsay@1.2.0
Você pode especificar versões instalando pacotes globais:
npm install -g webpack@4.16.4
Se você precisar descobrir quais versões de um pacote estão disponíveis no npm, faça isso com a ajuda desta construção:
npm view <package> versions
Aqui está um exemplo do resultado de seu trabalho:
> npm view cowsay versions [ '1.0.0', '1.0.1', '1.0.2', '1.0.3', '1.1.0', '1.1.1', '1.1.2', '1.1.3', '1.1.4', '1.1.5', '1.1.6', '1.1.7', '1.1.8', '1.1.9', '1.2.0', '1.2.1', '1.3.0', '1.3.1' ]
Atualizando dependências do projeto para suas versões mais recentes
Quando você instala um pacote com um comando do tipo
npm install <packagename>
, a versão mais recente é baixada do repositório e colocada na pasta
node_modules
. Nesse caso, as entradas correspondentes são adicionadas aos
package-lock.json
package.json
e
package-lock.json
localizados na pasta do projeto.
Além disso, instalando um pacote, o npm localiza e instala suas dependências.
Suponha que instalemos o pacote cowsay familiar executando o
npm install cowsay
. O pacote será instalado na pasta
node_modules
do projeto e a seguinte entrada estará no arquivo
package.json
:
{ "dependencies": { "cowsay": "^1.3.1" } }
package-lock.json
também incluirá informações sobre este pacote. Aqui está um fragmento:
{ "requires": true, "lockfileVersion": 1, "dependencies": { "cowsay": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/cowsay/-/cowsay-1.3.1.tgz", "integrity": "sha512-3PVFe6FePVtPj1HTeLin9v8WyLl+VmM1l1H/5P+BTTDkMAjufp+0F9eLjzRnOHzVAYeIYFF5po5NjRrgefnRMQ==", "requires": { "get-stdin": "^5.0.1", "optimist": "~0.6.1", "string-width": "~2.1.1", "strip-eof": "^1.0.0" } } } }
A partir desses dois arquivos, você pode descobrir que instalamos o cowsay versão 1.3.1 e que a regra de atualização do pacote está especificada como
^1.3.1
. Na quarta parte desta série de materiais, já falamos sobre as regras do controle de versão semântico. Lembre-se de que esta entrada significa que o npm pode atualizar o pacote quando suas versões secundária e de patch forem lançadas.
Se, por exemplo, uma nova versão secundária de um pacote for
npm update
e executarmos o comando
npm update
, a versão instalada do pacote será atualizada e as informações sobre o pacote instalado
package-lock.json
atualizadas no arquivo
package-lock.json
e o arquivo
package.json
permanecerá inalterado.
Para descobrir se novas versões dos pacotes usados no projeto foram lançadas, você pode usar o seguinte comando:
npm outdated
Aqui estão os resultados deste comando para um projeto cujas dependências não foram atualizadas por um longo tempo:
Análise de dependências obsoletas do projetoAlgumas das atualizações de pacotes disponíveis são seus principais lançamentos, cujas atualizações não ocorrerão quando o comando
npm update
for executado. A atualização para os principais releases desta equipe não é realizada, pois eles (por definição) podem conter grandes alterações que não se distinguem pela compatibilidade com versões anteriores anteriores, e o npm procura salvar o desenvolvedor de problemas que possam causar o uso de tais pacotes.
Para atualizar para as novas versões principais de todos os pacotes usados, instale globalmente o
npm-check-updates
:
npm install -g npm-check-updates
Em seguida, execute o utilitário fornecido por ele:
ncu -u
Este comando atualizará o arquivo
package.json
, fazendo alterações nas instruções para versões adequadas do pacote nas
devDependencies
dependencies
e
devDependencies
. Isso permitirá que o npm atualize os pacotes usados no projeto para novas versões principais depois de executar o comando
npm update
.
Se você deseja instalar as versões mais recentes do pacote para um projeto que você acabou de baixar, que ainda não possui uma pasta
node_modules
, em vez de
npm update
, execute o comando
npm install
.
Desinstalação local ou global de pacotes
Para desinstalar um pacote que foi instalado anteriormente localmente (usando o comando
install <package-name>
), execute um comando parecido com este:
npm uninstall <package-name>
Se o pacote estiver instalado globalmente, você precisará usar o sinalizador
-g
(--global
) para removê-lo. Por exemplo, um comando semelhante pode ser assim:
npm uninstall -g webpack
Ao executar esse comando, a pasta atual não importa.
Sobre como escolher entre instalação global e local de pacotes
Quando e por que os pacotes são melhor instalados globalmente? Para responder a essa pergunta, lembremos como as instalações local e global dos pacotes diferem:
- Pacotes locais são instalados no diretório em que eles executam um comando no formato
npm install <package-name>
. Esses pacotes estão localizados na pasta node_modules
localizada neste diretório. - Pacotes globais são instalados em uma pasta especial (que depende das configurações específicas do seu sistema), independentemente de onde eles executam um comando no formato
npm install -g <package-name>
.
Conectar pacotes locais e globais no código é o mesmo:
require('package-name')
Então, qual é a melhor maneira de instalar pacotes?
Em geral, todos os pacotes devem ser instalados localmente. Por esse motivo, mesmo se você tiver dezenas de projetos Node.js., poderá garantir, se necessário, o uso de versões diferentes dos mesmos pacotes.
A atualização do pacote global leva ao fato de que todos os projetos nos quais ele é aplicado usarão seu novo release. É fácil entender que isso, em termos de suporte ao projeto, pode levar a um verdadeiro pesadelo, pois os novos lançamentos de alguns pacotes podem ser incompatíveis com as versões antigas.
Se cada projeto tiver sua própria versão local de um pacote, mesmo que isso pareça um desperdício de recursos, é uma taxa muito pequena pela oportunidade de evitar as consequências negativas que podem ser causadas pela incompatibilidade de novas versões de pacotes atualizadas centralmente com o código do projeto.
Os pacotes devem ser instalados globalmente quando são alguns utilitários chamados da linha de comando usados em muitos projetos.
Esses pacotes também podem ser instalados localmente, executando os utilitários de linha de comando que eles fornecem usando npx, mas alguns pacotes ainda são melhor instalados globalmente. Esses pacotes com os quais você pode estar familiarizado incluem, por exemplo, o seguinte:
- npm
- create-react-app
- vue-cli
- grunt-cli
- mocha
- react-native-cli
- Gatsby-Cli
- para sempre
- nodemon
É possível que seu sistema já tenha pacotes instalados globalmente. Para descobrir isso, use o seguinte comando:
npm list -g --depth 0
Sobre dependências do projeto
Quando um pacote deve ser considerado como uma dependência regular do projeto, necessária para garantir seu funcionamento, e quando - como uma dependência do desenvolvimento?
Ao instalar um pacote usando um comando como
npm install <package-name>
ele é instalado como uma dependência regular. Um registro desse pacote é feito na seção
dependencies
do arquivo
package.json
(antes da npm 5, esse registro era feito apenas usando o sinalizador
--save
, agora não é necessário usá-lo).
O uso do
--save-dev
permite instalar o pacote como uma dependência de desenvolvimento. Ao mesmo tempo, é feito um registro na seção
devDependencies
do arquivo
devDependencies
.
Dependências de desenvolvimento são pacotes necessários no processo de desenvolvimento de um projeto e, durante seu funcionamento normal, não são necessários. Tais pacotes incluem, por exemplo, ferramentas de teste, Webpack, Babel.
Quando um projeto é implantado usando o comando
npm install
em sua pasta, na qual existe uma pasta que contém o arquivo
package.json
, isso leva à instalação de todas as dependências, já que o npm assume que essa instalação é executada com a finalidade de trabalhar no projeto.
Portanto, se o pacote precisar ser implementado na produção, ao implementá-lo, você precisará usar o
install --production
npm
install --production
--production. Graças ao sinalizador
--production
,
--production
dependências de
--production
não serão instaladas.
Utilitário Npx
Agora falaremos sobre uma equipe muito poderosa,
npx , que apareceu na npm 5.2. Uma de suas capacidades é executar arquivos executáveis incluídos nos pacotes npm. Já consideramos usar o npx para executar um arquivo semelhante a partir do pacote cowsay. Agora vamos falar sobre isso com mais detalhes.
NUse npx para simplificar a execução de comandos locais
Os desenvolvedores do Node.js. publicaram muitos arquivos executáveis (utilitários) na forma de pacotes que deveriam ser instalados globalmente, o que fornecia acesso conveniente a seus recursos, já que era possível executá-los na linha de comando simplesmente digitando o nome do comando correspondente. No entanto, trabalhar em um ambiente assim era muito desconfortável se fosse necessário instalar versões diferentes dos mesmos pacotes.
O uso de um comando no formato
npx commandname
procura automaticamente o arquivo desejado na pasta do projeto
node_modules
. Isso elimina a necessidade de saber o caminho exato para esse arquivo. Isso também torna desnecessário instalar o pacote globalmente com acesso a ele em qualquer lugar do sistema de arquivos usando a variável de sistema
PATH
.
ErExecutando utilitários sem a necessidade de instalá-los
Npx tem outro recurso interessante, graças ao qual os utilitários podem ser iniciados sem antes instalá-los. Isso é útil principalmente pelos seguintes motivos:
- Não é necessária a instalação de utilitários.
- Você pode executar versões diferentes dos mesmos utilitários especificando a versão desejada usando a construção
@version
.
Vamos ver como usar esse mecanismo, usando o utilitário
cowsay
você já conhece. Portanto, se o pacote cowsay estiver instalado globalmente, a execução do
cowsay "Hello"
na linha de comando exibirá no console uma vaca "falante":
_______ < Hello > ------- \ ^__^ \ (oo)\_______ (__)\ )\/\ ||----w | || ||
Se o pacote cowsay não estiver instalado globalmente, um comando semelhante gerará um erro.
O utilitário npx permite executar esses comandos sem instalá-los. Parece, no quadro de nosso exemplo, o seguinte:
npx cowsay "Hello"
Esse comando funcionará, mas embora uma vaca "falante", em geral, não traga muitos benefícios, a mesma abordagem pode ser usada para executar comandos muito mais úteis. Aqui estão alguns exemplos:
- Existe uma ferramenta de linha de comando projetada para criar e executar aplicativos Vue. Usando npx, ele pode ser chamado assim:
npx vue create my-vue-app
. - Você pode usar o utilitário
create-react-app
para create-react-app
aplicativos React. Sua chamada pelo npx é assim: npx create-react-app my-react-app
.
Depois de baixar e usar o código npx apropriado, ele será excluído.
▍ Iniciando o código JavaScript usando várias versões do Node.js
Para executar algum código usando versões diferentes do Node.js, você pode, usando o npx, acessar o
node
pacote npm, indicando sua versão. É assim:
npx node@6 -v
Isso elimina a necessidade de ferramentas como nvm ou outros gerenciadores de versão do Node.js.
▍Inicie fragmentos de código arbitrário disponíveis em um determinado endereço
Npx permite executar não apenas o código publicado em npm. Em particular, se você tiver um link para um determinado pedaço de código (por exemplo, uma essência publicada no
GitHub ), poderá executá-lo assim:
npx https:
Obviamente, ao executar esse código, você não deve esquecer a segurança. O Npx oferece ao desenvolvedor grandes oportunidades, mas também significa grande responsabilidade.
▍ Resultados
Hoje falamos sobre alguns mecanismos úteis do npm e o uso do npx. Neste ponto, você deve ter um entendimento básico do dispositivo npm e como trabalhar com este gerenciador de pacotes. Se você quiser dar uma olhada mais profunda no npm, consulte a
página de documentação do projeto e experimente mais.
Da próxima vez, discutiremos alguns mecanismos básicos do Node.js., um entendimento necessário para o desenvolvimento bem-sucedido de aplicativos para esta plataforma.
Caros leitores! Você usa npx?
