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

339 lines
12 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

---
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!