freeCodeCamp/guide/portuguese/nodejs/npm/index.md

339 lines
12 KiB
Markdown
Raw Normal View History

---
title: NPM
localeTitle: NPM
---
## NPM
O Node.js possibilita gravar aplicativos em JavaScript no servidor. Ele é baseado no tempo de execução do V8 JavaScript e escrito em C ++ - então é rápido. Originalmente, era destinado a ser um ambiente de servidor para aplicativos, mas os desenvolvedores começaram a usá-lo para criar módulos para ajudá-los na automação de tarefas locais. Desde então, todo um novo ecossistema de ferramentas baseadas em Node evoluiu para transformar a face do desenvolvimento de front-end.
Para usar esses módulos (ou pacotes) no Node.js, precisamos instalá-los e gerenciá-los de maneira útil. É aí que entra o npm, o gerenciador de pacotes do Node. Ele instala os pacotes que você quer usar e fornece uma interface útil para trabalhar com eles.
## Instalando o NPM
Para instalar o `npm` , temos que baixar os binários do Nodejs no seu ambiente local. Os binários do Node.js incluem a versão mais recente do npm. Para verificar se:
```shell
npm -v
5.6.0
```
Node Package Manager (NPM) fornece duas funcionalidades principais -
* Repositórios on-line para pacotes / módulos node.js que podem ser pesquisados no `npmjs.com` .
* Utilitário de linha de comando para instalar pacotes Node.js, fazer gerenciamento de versão e gerenciamento de dependência de pacotes Node.js.
## Instalando módulos usando o NPM
`npm` pode instalar pacotes no modo local ou global. Por padrão, o NPM instala qualquer dependência no modo local. No modo local, ele instala o pacote em uma pasta node\_modules no diretório de trabalho pai. Este local é de propriedade do usuário atual. Pacotes globais são instalados em {prefixo} `/lib/node_modules/` que é de propriedade de root, onde {prefixo} é usualmente `/usr/ or /usr/local` . Isso significa que você teria que usar o sudo para instalar pacotes globalmente, o que poderia causar erros de permissão ao resolver dependências de terceiros, além de ser uma preocupação de segurança.
### Instalando Pacotes no Modo Global
Quaisquer pacotes instalados globalmente ficarão disponíveis na linha de comando. Usamos o sinalizador --global ou -g para instalar pacotes globalmente.
```shell
$ npm install uglify-js --global
```
Podemos listar os pacotes globais que instalamos com o comando npm list.
```shell
$ npm list --global
/usr/local/lib
├─┬ npm@5.6.0
│ ├── abbrev@1.1.0
│ ├── ansi-regex@2.1.1
│ ├── ansicolors@0.3.2
│ ├── ansistyles@0.1.3
....................
└─┬ uglify-js@3.0.15
├─┬ commander@2.9.0
│ └── graceful-readlink@1.0.1
└── source-map@0.5.6
```
A saída, no entanto, é bastante detalhada. Podemos mudar isso com a opção --depth = 0.
```js
$ npm list -g --depth=0
/usr/local/lib
├── npm@5.6.0
└── uglify-js@3.0.15
```
### Instalando Pacotes no Modo Local
Quando você instala pacotes localmente, normalmente faz isso usando um arquivo package.json.
```shell
npm install --save express
```
Agora você pode usar este módulo no seu arquivo js como segue
```js
const express = require('express');
```
Os módulos locais são divididos em dois tipos de dependências: `devDepenednecies` e `dependencies` . A diferença entre esses dois é que devDependencies são módulos que são requeridos apenas durante o desenvolvimento, enquanto dependências são módulos que também são requeridos no tempo de execução. Para salvar uma dependência como devDependency na instalação, precisamos fazer um `npm install --save-dev` , em vez de apenas um `npm install --save` .
Um bom atalho para instalar um devDependency que eu gosto de usar é o `npm i -D` . A abreviação de salvar uma dependência regular é `-S` vez de `-D` .
### Instalando uma versão específica de um pacote
Para fazer isso, mencionamos a versão do pacote que queremos instalar.
```shell
$ npm install underscore@1.8.2 -S
```
Para remover uma dependência global, use o sinalizador `-g` .
### Desinstalando Pacotes Locais
O npm é um gerenciador de pacotes, portanto deve ser capaz de remover um pacote. Nós podemos remover o pacote:
```shell
$ npm uninstall underscore -S
```
Para atualizar uma dependência global, use o sinalizador `-g` .
### Atualizando um pacote
Para atualizar um pacote, você pode fazer:
```
$ npm update underscore -S
```
Para verificar se há uma atualização disponível para qualquer pacote associado ao nosso projeto:
```shell
$ npm outdated
Package Current Wanted Latest Location
underscore 1.8.2 1.8.3 1.8.3 project
```
A coluna Atual nos mostra a versão instalada localmente. A última coluna nos informa a última versão do pacote. E a coluna Wanted nos diz a versão mais recente do pacote para o qual podemos fazer upgrade sem quebrar nosso código existente.
## Gerenciando Dependências com o package.json
Se não estiver usando um sinalizador específico e instalar um módulo como o `npm install express` instalará o módulo na pasta `node_modules` localmente, mas o `package.json` que mantém registros de todas as dependências que estamos usando em um projeto não será atualizado com nossa adição. Assim, o pacote será específico do desenvolvimento, não será instalado no ambiente runtimme. Certifique-se de usar sempre um sinalizador adequado e manter atualizado o arquivo `package.json` .
Quando você instala pacotes localmente, você precisa de um arquivo package.json. Para gerar um, você pode fazer isso usando o comando `npm init` . Ele vai aparecer com algumas perguntas que, ao pressionar Enter, você pode manter os valores padrão.
```shell
$ npm init
package name: (project)
version: (1.0.0)
description: Demo of package.json
entry point: (index.js)
test command:
git repository:
keywords:
author:
license: (ISC)
```
Pense em `package.json` como o guardião de todas as dependências ou manifestação de um projeto Node.js. Se você quiser uma maneira mais rápida de gerar um arquivo package.json, use `npm init --y` .
Lista de Atributos Comuns em um arquivo `package.json` :
* nome - nome do pacote
* versão - versão semântica do pacote
* descrição - descrição do pacote
* homepage - homepage do pacote
* autor - autor do pacote
* colaboradores - nome dos contribuintes para o pacote
* dependências - lista de dependências. O NPM instala automaticamente todas as dependências mencionadas aqui na pasta node\_module do pacote.
* devDependencies - lista de todas as dependências específicas de desenvolvimento
* repositório - tipo de repositório e URL do pacote
* ponto de entrada principal do pacote
* palavras-chave - palavras-chave
* licença - uma licença para o seu pacote, para que as pessoas saibam como podem usá-lo e quaisquer restrições que você esteja colocando nele.
* scripts - A propriedade "scripts" é um dicionário que contém comandos de script que são executados em vários momentos no ciclo de vida do seu pacote.
* config - objeto que pode ser usado para definir parâmetros de configuração usados em scripts de pacotes que persistem em atualizações.
Um exemplo:
```json
{
"name": "express",
"description": "Fast, unopinionated, minimalist web framework",
"version": "4.11.2",
"author": {
"name": "TJ Holowaychuk",
"email": "tj@vision-media.ca"
},
"contributors": [{
"name": "Aaron Heckmann",
"email": "aaron.heckmann+github@gmail.com"
},
],
"license": "MIT", "repository": {
"type": "git",
"url": "https://github.com/strongloop/express"
},
"homepage": "https://expressjs.com/", "keywords": [
"express",
"framework",
"sinatra",
"web",
"rest",
"restful",
"router",
"app",
"api"
],
"dependencies": {
"serve-static": "~1.8.1",
},
"devDependencies": {
"jade": "~1.9.1",
},
"engines": {
"node": ">= 0.10.0"
},
"files": [
"LICENSE",
"History.md",
"Readme.md",
"index.js",
"lib/"
],
"scripts": {
"test": "mocha --require test/support/env
--reporter spec --bail --check-leaks test/ test/acceptance/",
"test-cov": "istanbul cover node_modules/mocha/bin/_mocha
-- --require test/support/env --reporter dot --check-leaks test/ test/acceptance/",
"test-tap": "mocha --require test/support/env
--reporter tap --check-leaks test/ test/acceptance/",
"test-travis": "istanbul cover node_modules/mocha/bin/_mocha
--report lcovonly -- --require test/support/env
--reporter spec --check-leaks test/ test/acceptance/"
},
}
```
## scripts do npm
`npm` scripts `npm` são usados para automatizar tarefas repetitivas. Por exemplo, construindo seu projeto, minimizando arquivos CSS (Cascading Style Sheets) e JavaScript (JS). Scripts também são usados na exclusão de arquivos e pastas temporários, etc. Eles podem ser personalizados e acessados via `scripts` em `package.json` .
```json
{
"name": "super-cool-package",
"version": "1.0.0",
"scripts": {}
}
```
Um exemplo do script NPM mais popular:
```json
"scripts": {
"start": "node index.js",
...
}
```
## npm Cache
Quando o npm instala um pacote, ele mantém uma cópia, então, da próxima vez que você quiser instalar esse pacote, ele não precisará acessar a rede. As cópias são armazenadas em cache no diretório .npm em seu caminho inicial.
```shell
$ ls ~/.npm
lodash.zipobject
log-driver
log-symbols
logalot
logfmt
loglevel
long-timeout
longest
longest-strea
```
Este diretório ficará cheio de pacotes antigos ao longo do tempo, por isso é útil limpá-lo ocasionalmente.
```shell
$ npm cache clean
```
## Fio - uma alternativa ao npm
Yarn também é um gerenciador de pacotes JavaScript desenvolvido e mantido pelo Facebook. Ambos compartilham semelhanças de alto nível quando se trata de usá-los. É supostamente mais rápido instalar dependências do que npm. Para instalá-lo:
```shell
npm install -g yarn
```
O fio não pretende substituir o npm, mais como melhorar o mesmo. Ele usa o mesmo arquivo package.json e salva as dependências na pasta `node_modules/` . Para inicializar um projcet, você usará:
```shell
yarn init
```
### Adicionando, Atualizando e Removendo Dependências
Adicionar uma nova dependência é fácil e semelhante ao npm:
```shell
yarn add [package-name]
```
Se você quer uma versão ou tag específica do pacote, você pode fazer isso.
```shell
yarn add express@4.14.1
```
Para dependências dev, dependências ponto a ponto e dependências opcionais, você passa o --dev --peer --optional respectivamente.
```shell
yarn add gulp --dev
```
Vai economizar gole sob devDependencies. Para atualizar ou remover um pacote, basta substituir o comando add por upgrade ou remove, seguido pelo nome do pacote.
```shell
# upgrade a gulp from 3.9.1 to version 4
yarn upgrade gulp@4.0
# remove a gulp
yarn remove gulp
```
Após cada instalação, atualização ou remoção, o fio atualiza um arquivo yarn.lock que acompanha a versão exata do pacote instalada no diretório node\_modules. Recurso semelhante foi atualizado em npm. Agora há um `package-lock.json` que se comporta exatamente da mesma maneira que o `yarn.lock` em versões mais novas do npm.
### Números de versão do pacote e o que significam
Uma primeira versão de um pacote npm é sempre 1.0.0
Correções de bugs, ou pequenas alterações incrementam o terceiro dígito, o hens 1.0.0 se tornaria 1.0.1
Novos recursos que não quebram versões anteriores de um pacote incrementam o segundo dígito, o hens 1.0.0 se tornaria 1.1.0
Todas as alterações que quebram as versões anteriores de um pacote incrementam o primeiro dígito, o hens 1.0.0 se tornaria 2.0.0
É importante lembrar disso ao atualizar os pacotes para manter seu projeto estável!