Arquivo package.json e Configuração do Projeto - Node.js
Arquivo package.json
Para facilitar a gestão de configurações e pacotes de uma aplicação no npm, utilizamos o arquivo de configuração package.json
package.json
package.json
Vamos pegar o arquivo package.json
Aqui, temos três seções definidas:
: o nome do projeto. Pode ser qualquer nome. Neste caso, o nome do projeto é "helloapp".name
: a versão do projeto. Começaremos com a versão 1.0.0.version
: a seção de dependências. Aqui listamos os pacotes que pretendemos usar e que serão instalados no projeto. As dependências são especificadas como um objeto onde cada propriedade representa o nome do pacote e o valor representa sua versão. Neste exemplo, estamos instalando dois pacotes: "lodash" na versão "4.17.21" e "express" na versão "^4.18.2". Lodash é uma biblioteca para manipulação de dados, especialmente arrays, enquanto express é um framework web leve para facilitar a criação de aplicações web.dependencies
Além disso, as dependências podem ser listadas na seção
. No entanto, geralmente colocamos na seçãodevDependencies
os pacotes usados durante o desenvolvimento da aplicação, enquanto na seçãodevDependencies
ficam os pacotes utilizados durante a execução da aplicação.dependencies
Vale destacar que o arquivo package.json
: descrição do pacote.description
: arquivo principal, aquele onde o código da aplicação começa.main
: array de palavras-chave. Estas palavras podem ser usadas nas buscas no repositório npm.keywords
: endereço da página inicial do projeto.homepage
: licença do pacote.license
author: autor do pacote. Se houver vários autores, indica-se o principal. As informações do autor incluem nome, podendo também incluir email e endereço da página inicial.
: array contendo outros autores (caso haja mais de um).contributors
: repositório do código-fonte do projeto.repository
os: sistemas operacionais suportados.
Agora, vamos instalar os pacotes. Para isso, no terminal, navegue até a pasta do projeto e execute o comando:
c:\app> npm install
Após a instalação, o npm fornecerá um resumo básico dos pacotes instalados. Vale notar que alguns pacotes podem utilizar módulos obsoletos com vulnerabilidades, e o npm apresentará informações sobre tais módulos durante a instalação.
added 63 packages, and audited 64 packages in 4s 11 packages are looking for funding run `npm fund` for details found 0 vulnerabilities
Depois disso, os pacotes serão instalados na pasta node_modules
app.js
const express = require("express"); // obtendo o módulo express
// criando a aplicação express
const app = express();
// definindo um handler para a rota "/"
app.get("/", function(_, response) {
response.setHeader('Content-Type', 'text/html; charset=utf-8');
response.end("Hello Programício!");
});
// iniciando a escuta de conexões na porta 3000
app.listen(3000, function() {
console.log("Servidor iniciado em http://localhost:3000");
});
A primeira linha carrega o módulo express
/
app.get()
/
Para que o servidor comece a escutar conexões, chamamos o método app.listen()
Vamos rodar a aplicação com o comando node app.js
c:\app> node app.js Servidor iniciado em http://localhost:3000
E, no navegador, vamos acessar o endereço http://localhost:3000/

SemVer (Versionamento Semântico)
Ao definir a versão de um pacote, utiliza-se o versionamento semântico. O número da versão geralmente segue o formato "major.minor.patch". Se um bug é encontrado e corrigido na aplicação ou pacote, incrementa-se o número "patch". Se uma nova funcionalidade compatível com a versão anterior é adicionada, incrementa-se o número "minor". Se grandes mudanças incompatíveis com a versão anterior são introduzidas, incrementa-se o número "major". Assim, ao olhar para diferentes versões de pacotes, podemos inferir a extensão das mudanças. Por exemplo, considere a versão usada anteriormente do lodash, "4.17.21":
major: 4
minor: 17
patch: 21
No exemplo com o express, a versão do pacote continha o símbolo de acento circunflexo: "^4.18.2". O símbolo ^
Também pode-se usar o símbolo ~
Alterando e Removendo Pacotes
No decorrer do desenvolvimento de um projeto, pode ser necessário instalar uma versão diferente de um pacote. Por exemplo, uma nova versão de uma biblioteca pode ser lançada e desejamos utilizá-la em nosso projeto no lugar da versão antiga. Ou uma nova versão instalada pode conter bugs ou ser incompatível com outros componentes da aplicação, então optamos por usar uma versão mais antiga. Nesse caso, basta alterar a versão do pacote no arquivo package.json e executar novamente o comando npm install
node_modules
Se precisarmos remover um pacote, podemos simplesmente excluí-lo da seção dependencies
devDependencies
package.json
{
"name": "helloapp",
"version": "1.0.0",
"dependencies": {
"express": "^4.18.2"
}
}
Depois, executamos o comando npm install
c:\app> npm install removed 1 package, and audited 63 packages in 2s 11 packages are looking for funding run `npm fund` for details found 0 vulnerabilities
Podemos remover todos os pacotes do package.json
npm install
Podemos combinar com a instalação ou remoção manual de pacotes com o comando npm install
npm uninstall
npm uninstall express
Nesse caso, o npm removerá o pacote express da pasta node_modules
package.json
Criando automaticamente o arquivo package.json
O gerenciador de pacotes npm permite criar automaticamente o arquivo package.json
package.json
c:\app> npm init
O utilitário guiará o usuário na criação do arquivo package.json. Ele cobre apenas os itens mais comuns e tenta adivinhar valores padrão sensatos.
This utility will walk you through creating a package.json file. It only covers the most common items, and tries to guess sensible defaults. See `npm help init` for definitive documentation on these fields and exactly what they do. Use `npm install <pkg>` afterwards to install a package and save it as a dependency in the package.json file. Press ^C at any time to quit. package name: (app) helloapp version: (1.0.0) description: entry point: (app.js) test command: git repository: keywords: author: license: (ISC) About to write to c:\app\package.json: { "name": "helloapp", "version": "1.0.0", "description": "", "main": "app.js", "devDependencies": {}, "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC" } Is this OK? (yes) yes
Durante o processo de criação, o terminal solicitará uma série de informações sobre as configurações, como o nome do projeto, sua versão e outros parâmetros. Podemos simplesmente pressionar Enter sem inserir valores, utilizando os padrões sugeridos. No final, para concluir a criação do arquivo, digitamos "yes". O resultado será a criação do arquivo package.json com o seguinte conteúdo:
{
"name": "helloapp",
"version": "1.0.0",
"description": "",
"main": "app.js",
"devDependencies": {},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
Comandos npm
O npm permite definir comandos no arquivo package.json que executam ações específicas. Por exemplo, definimos o seguinte arquivo app.js
{
"name": "helloapp",
"version": "1.0.0",
"scripts": {
"start": "node app.js",
"dev": "node app.js Tom 26",
"test": "echo \"Hello www.programicio.com\" && exit 1"
}
}
Aqui, adicionamos a seção scripts
O primeiro comando é chamado start
app.js
app.js
O segundo comando é chamado dev
O terceiro comando é chamado test
echo
&&
exit
Os nomes dos comandos podem ser arbitrários. No entanto, há nomes reservados para comandos, como start
test
run
package.json
start
npm [nome_do_comando]
Por exemplo, para executar o comando start
c:\app> npm start
Para executar o comando test
c:\app> npm test
Os comandos com outros nomes, como dev
package.json
npm run [nome_do_comando]
Por exemplo, vamos executar os três comandos sequencialmente:
c:\app> npm start > helloapp{1.0.0 start > node app.js name: undefined age: undefined c:\app> npm run dev > helloapp{1.0.0 dev > node app.js Tom 26 name: Tom age: 26 c:\app> npm test > helloapp{1.0.0 test > echo "Hello www.programicio.com" Hello www.programicio.com