YARN vs NPM: Escolhendo o Seu Gerenciador de Pacotes

Embora hoje em dia não faça muita diferença qual desses gerenciadores de pacotes você decida usar, uma vez que ambos entregam basicamente a mesma velocidade na instalação de pacotes e o mesmo nível de confiança, ainda existem pessoas que assim como eu gostam de usar um ou outro.

Aqui irei demonstrar uma forma de inicializar seu projeto utilizando o YARN. O motivo para isso é que esse recurso não é bem documentado pelo CDK (pelo menos eu não encontrei uma doc) por mais que seja um recurso já existente.

Utilizando NPM

Se você é do time NPM, ao iniciar sua aplicação com cdk init app --language=typescript já estará por padrão utilizando o NPM, por ser o gerenciado de pacores nativo do Node.js.

Utilizando YARN

Para utilização do YARN como gerenciador de pacotes você pode estar usando o seguinte comando.

cdk init app --language=typescript --package-manager=yarn --generateOnly

Junto com a implementação do YARN no projeto do CDK, também foi implementado o generateOnly, que é basicamente uma flag que permite a inicialização do projeto sem instalar os pacotes, uma coisa que você pode fazer por conta própria e que evita aquele longo tempo de espera na inicialização do repositório.

Vale lembrar que você precisa ter o CDK instalado na sua maquina e que a versão do seu binário será utilizada para gerar o projeto.

Uma vez que o projeto for gerado você todas as versões de dependências são gerenciadas pelo YARN.

Infelizmente o README do projeto não é atualizado para utilização com o YARN, então você deve fazer isso por conta própria, assim como os scrips do package.json.

Aqui esta um exemplo de script que você pode utilizar.

{
  "scripts": {
    "build": "tsc",
    "compile": "tsc --pretty",
    "deploy": "cdk deploy",
    "diff": "cdk diff",
    "synth": "cdk synth",
    "lint": "eslint src/*.ts & eslint src/**/*.ts",
    "lint:fix": "eslint --fix src",
    "prettier": "prettier --check src/**/*.ts",
    "prettier:fix": "prettier --write src/**/*.ts",
    "test": "jest",
    "test:fix": "jest --updateSnapshot"
  }
}

Além disso vale a pena adicionar um aviso para que o npm não seja utilizado caso esteja trabalhando em time.

{
  "engines": {
    "npm": "use-yarn",
 }
}

Dessa forma você você pode estar usando YARN para trabalhar com seu projeto CDK.