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.

Latest comments (4)

Collapse
 
barbosamarlem profile image
Marlem Barbosa

Simples e objetivo. Parabéns!

Collapse
 
stanley profile image
Stanley Gomes

Valeu marlem ✌️

Collapse
 
marcotuliomelo profile image
Marco Tulio Melo

Com certeza ajudou muito, artigo top!

Collapse
 
stanley profile image
Stanley Gomes

Valeu Marco Túlio!!