1. O Que E o package.json
O arquivo package.json e o manifesto de qualquer projeto Node.js. Ele descreve o projeto, lista suas dependencias e define scripts de automacao. Todo projeto que usa npm ou yarn precisa de um package.json na raiz.
Alem de configurar o projeto localmente, o package.json e o arquivo que o npm usa para publicar pacotes no registry — tornando sua biblioteca disponivel para milhoes de desenvolvedores.
2. Campos Essenciais
Os campos mais importantes de um package.json:
- name: identificador unico do pacote em letras minusculas, sem espacos.
- version: versao no formato SemVer (ex: 1.2.3).
- description: descricao breve para busca no npm registry.
- main: ponto de entrada quando o pacote e importado via require().
- license: licenca de uso, MIT sendo a mais comum para open source.
3. dependencies vs devDependencies
A distincao entre os dois tipos de dependencia e fundamental:
- dependencies: pacotes necessarios em producao (ex: express, mongoose, lodash). Sao instalados ao rodar
npm installem producao. - devDependencies: pacotes necessarios apenas durante desenvolvimento e build (ex: typescript, jest, eslint). Nao sao instalados em producao com
npm install --production.
"Manter devDependencies separadas reduz o tamanho do bundle em producao e melhora a seguranca, evitando expor ferramentas de desenvolvimento."
4. Scripts npm
Os scripts sao comandos executados via npm run nome. Scripts especiais como start, test, build e prepare tem comportamentos predefinidos no npm. Voce pode encadear comandos com && ou usar pre/post hooks para automacao.
5. Versionamento Semantico
O npm usa SemVer (Major.Minor.Patch) com prefixos de range:
- ^1.2.3: aceita atualizacoes minor e patch (ate 2.0.0, exclusive).
- ~1.2.3: aceita apenas atualizacoes patch (ate 1.3.0, exclusive).
- 1.2.3: versao exata, sem atualizacoes automaticas.
- *: qualquer versao (nao recomendado em producao).
6. Perguntas Frequentes
Devo commitar o package-lock.json?
Sim, sempre commite o package-lock.json em projetos de aplicacao. Ele garante que todos os desenvolvedores e o CI usem exatamente as mesmas versoes transitivas das dependencias, evitando o famoso "funciona na minha maquina".
Qual a diferenca entre npm e yarn no package.json?
O package.json e compativel com ambos. A diferenca esta nos arquivos de lock (package-lock.json para npm, yarn.lock para yarn) e em algumas configuracoes de workspace. O gerador da Chipak gera um package.json padrao valido para qualquer gerenciador.