DEV Community

Cover image for A anatomia do package.json 🧠
Stanley Gomes
Stanley Gomes

Posted on • Updated on

A anatomia do package.json 🧠

O que é e para que serve?

Se você trabalha com javascript, com certeza já ouviu falar e editou o famoso package.json. Nesse post, vou focar em mostrar algumas das funcionalidades e props disponibilizadas por esse arquivo para seu projeto.

O package.json é um arquivo de um projeto javascript que é responsável por guardar informações, scripts e controle de versionamento de bibliotecas do projetos. Essas dependências são gerenciadas pelo NPM.

Informações sobre o projeto

Você pode utilizar algumas propriedades do package.json para guardar informações sobre o projeto e que também são úteis e necessárias ao publicar um pacote no NPM. Você pode visualizar nesse link todas as propriedades reservadas do package.json.

Abaixo, um exemplo de configurações básicas de um package.json

{
    "name": "nodevader",
    "version": "2.1.1",
    "description": "",
    "main": "index.js",
    "license": "MIT"
}
Enter fullscreen mode Exit fullscreen mode

A propriedade version utiliza a notação de versionamento semântico. Já a propriedade main é utilizada em alguns projetos como o ponto de entrada da aplicação.

Scripts

Na sessão de scripts você pode declarar alguns nomes para abreviar a execução de ações no projeto para usar em uma palavra.

Veja abaixo um exemplo de package.json com alguns scripts com diferentes execuções para ambientes desenvolvimento, homologação e produção.

{
    "name": "nodevader",
    "version": "2.1.1",
    "description": "",
    "main": "index.js",
    "scripts": {
        "development": "NODE_ENV=development nodemon src/index.js",
        "staging": "NODE_ENV=staging pm2 start ecosystem-staging.config.js",
        "production": "NODE_ENV=development pm2 start ecosystem-production.config.js",
        "migrate:up": "node src/migrate.js"
    },
    "license": "MIT"
}
Enter fullscreen mode Exit fullscreen mode

Para executar um script, basta rodar o comando no terminal npm run SCRIPT_NAME:

npm run development
Enter fullscreen mode Exit fullscreen mode

Dependencias

A principal responsabilidade do package.json é controlar as versões das dependências de pacotes do projeto. Ele é declarado como um objeto com nome e versão. É possível instalar dependências para ambiente apenas desenvolvimento e quando o NODE_ENV

{
    "name": "nodevader",
    "version": "2.1.1",
    "description": "",
    "main": "index.js",
    "scripts": {
        "development": "NODE_ENV=development nodemon src/index.js",
        "staging": "NODE_ENV=staging pm2 start ecosystem-staging.config.js",
        "production": "NODE_ENV=development pm2 start ecosystem-production.config.js",
        "migrate:up": "node src/migrate.js"
    },
    "dependencies": {
    "axios": "^0.21.1",
    "dotenv": "^8.2.0",
    "express": "^4.16.4",
    "winston": "^3.3.3"
  },
  "devDependencies": {
    "chai": "^4.2.0",
    "eslint": "^6.3.0",
    "mocha": "^8.2.1"
  },
    "license": "MIT"
}
Enter fullscreen mode Exit fullscreen mode

Para instalar e adicionar no package.json um dependência de desenvolvimento:

npm install --save-dev mocha
Enter fullscreen mode Exit fullscreen mode

Para instalar apenas as dependências e ignorar as dependências de desenvolvimento basta adicionar a flag --production.

npm install --production
Enter fullscreen mode Exit fullscreen mode

Lock de dependências

Quando você executa o comando npm install para instalar as dependências do projeto, é criado um arquivo package-lock.json que contém uma lista detalhada da árvore de dependências com a versão exata de cada dependência para garantir maior precisão e velocidade no controle dos pacotes do projeto.

Recomenda-se deixar esse arquivo commitado no projeto, visto que ele sempre acompanha as alterações feitas no package.json.


Obrigado pela leitura! Espero que possa ter ajudado. 🚀

Até mais.

Oldest comments (4)

Collapse
 
marcotuliomelo profile image
Marco Tulio Melo

Com certeza ajudou muito, artigo top!

Collapse
 
stanley profile image
Stanley Gomes

Valeu Marco Túlio!!

Collapse
 
barbosamarlem profile image
Marlem Barbosa

Simples e objetivo. Parabéns!

Collapse
 
stanley profile image
Stanley Gomes

Valeu marlem ✌️