Manual do Node.js, parte 5: npm e npx

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.




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 --depth=0 

Como resultado, se, por exemplo, você instalou apenas o pacote cowsay, o seguinte será exibido:

 > npm list --depth=0 /Users/flavio/dev/node/cowsay └── cowsay@1.3.1 

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 projeto

Algumas 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 #v6.14.3 npx node@8 -v #v8.11.3 

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://gist.github.com/zkat/4bc19503fe9e9309e2bfaa2c58074d32 

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?

Source: https://habr.com/ru/post/pt423705/


All Articles