Pacotes privados com Yarn Workspaces e Angular CLI

Em:

Às vezes, queremos criar pacotes privados para compartilhar entre nossos projetos, mas sem toda aquela entropia de, a cada atualização, ter que fazer todo o processo de publicação de um pacote no NPM. Na minha opinião, a melhor forma de se fazer isso é utilizando Yarn Workspaces e git submodule.

Neste artigo, vou mostrar como podemos fazer isso utilizando um projeto criado com Angular CLI. Imagine que o seguinte módulo será compartilhado entre vários projetos.

Uma das partes mais importantes do módulo que vamos compartilhar são as informações no `package.json`. Aqui, nós devemos declarar no mínimo o campo **name** e **version** do pacote.

Nesse arquivo também devemos declarar as dependências do nosso módulo, caso ele tenha alguma. As dependências do módulo podem ser do tipo *peerDependencies*, *dependencies* e *devDependencies*.

  • dependencies: são dependências em que o pacote precisa para funcionar corretamente.
  • devDependencies: são dependências que só serão utilizadas em ambiente de desenvolvimento.
  • peerDependencies: são um tipo especial de dependência. Quando declaramos uma dependência desse tipo, estamos dizendo que a aplicação na qual nosso pacote for instalado deverá ter esses pacotes já instalados. Como no exemplo acima, no qual declaramos que a aplicação deverá ter o @angular/core já instalado.

Feito isso e atualizado nosso repositório git, vamos para nossa aplicação adicionar o pacote como submódulo. Para fazer isso, vamos executar o seguinte comando no root do nosso projeto.

   git submodule add https://link-para-seu-repositor.io/shared-module

Agora que já temos nosso submódulo instalado, precisamos habilitar o yarn workspaces e adicionar o shared-module. Para habilitar o yarn workspaces precisamos adicionar os atributos private e workspaces no package.json da aplicação. Já para a importação do shared-module, devemos colocar exatamente o name e version que configuramos no pacote.

Por último, temos que dizer ao Typescript (*tsconfig.json*) que existe código fora do *src* que deverá ser compilado. Para isso, vamos adicionar o parâmetro “include”.

Como estamos mudando o comportamento default, também precisamos adicionar a pasta *src* nesse array de pastas.

Abraço e até a próxima!

Cursos recomendados pela BrazilJS

    • Weekly #173 – Ghost 0.11.13, Microsoft Linux e Firefox 50

      A BrazilJS Weekly é a seleção semanal que reúne as novidades sobre o desenvolvimento Web no Brasil e no mundo. Ainda não é inscrito? Faça o seu cadastro e receba nossa Newsletter semanal 😎👊🙂👌👍 Sugira conteúdo para a Weekly usando o nosso canal de issues no Github. Um agradecimento especial aos 6 colaboradores da edição […]

    • MidiaÉtnica_Lab – Um laboratório de ideias e propósitos

      O Instituto Mídia Étnica (IME), de Salvador, acaba de lançar o MidiaÉtnica_Lab para promover e divulgar ferramentas tecnológicas e sociais desenvolvidas nas periferias.

    • Posição sobre quebra do Código de Conduta  –  BrazilJS Conf 2015

      Infelizmente tomamos conhecimento de uma violação do código de conduta da BrazilJS Conf 2015. Este fato chegou até nós após a conferência. Ou seja, uma atitude durante o evento (que é o ideal) se tornou impossível. Levamos a sério o código de conduta e acreditamos que todos os 1300 participantes também. Estamos discutindo como organização, […]

    Patrocinadores BrazilJS

    Gold

    Silver

    Bronze

    Apoio

    BrazilJS® é uma iniciativa NASC.