DEV Community

Carlos Henrique
Carlos Henrique

Posted on

Como publicar um package npm de forma privada utilizando Github Packages

Recentemente, no meu trabalho, me deparei com a seguinte necessidade: publicar um pacote de maneira privada. Depois de avaliar algumas possibilidades, percebi que a melhor forma de fazer isso seria utilizando o GitHub Packages.

O que é o GitHub Packages?

O GitHub Packages permite que você armazene pacotes de diferentes tipos (como npm, Maven, Docker, etc.) diretamente no GitHub. Você pode torná-los públicos ou privados, dependendo da necessidade do seu projeto. Você pode conferir mais informações aqui.

Passo 1: Configurando o projeto e necessidades

Primeiro, é necessário que você tenha um repositório no GitHub onde o seu pacote será armazenado. Para garantir que o pacote seja privado, certifique-se de que o repositório é privado.

Passo 2: Criando o seu pacote

  1. Criando o package.json: Substitua <seu-usuario-ou-organizacao> pelo usuário ou organização desejada.
npm init --scope=@<seu-usuario-ou-organizacao>
Enter fullscreen mode Exit fullscreen mode

Isso vai gerar um package.json com o campo name já formatado com o escopo. Utilizando o meu perfil do GitHub como exemplo:

{
  "name": "@carloshendvpm/meu-pacote",
  "version": "1.0.0",
  "description": "Meu pacote privado no GitHub Packages",
  ...
}
Enter fullscreen mode Exit fullscreen mode

Passo 3: Configurando o registro para GitHub Packages

Agora, é preciso garantir que o npm saiba que você deseja publicar esse pacote no GitHub Packages, e não no registro público do npm. Para isso, adicione o campo publishConfig ao seu package.json:

"publishConfig": {
  "registry": "https://npm.pkg.github.com/"
}
Enter fullscreen mode Exit fullscreen mode

Isso informa ao npm que ele deve usar o GitHub Packages como destino de publicação. O seu package.json deve ficar assim:

{
  "name": "@carloshendvpm/meu-pacote",
  "version": "1.0.0",
  "type": "module",
  "repository": {
    "url": "https://github.com/carloshendvpm/meu-pacote.git"
  },
  "dependencies": {
    ...
  },
  "devDependencies": {
    ...
  },
  "publishConfig": {
    "registry": "https://npm.pkg.github.com/"
  }
}
Enter fullscreen mode Exit fullscreen mode

Passo 4: Utilizando GitHub Actions para publicar o pacote

Crie um diretório chamado .github/workflows dentro do seu projeto. E, dentro do diretório workflows, crie um arquivo publish.yml com o seguinte conteúdo:

name: Publish package to GitHub Packages
on:
  release:
    types: [published]
  workflow_dispatch:
jobs:
  build:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      packages: write
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: '20.x'
          registry-url: 'https://npm.pkg.github.com'
          scope: '@carloshendvpm'
      - name: Install dependencies
        run: npm install
      - name: Publish package
        run: npm publish --access restricted
        env:
          NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Enter fullscreen mode Exit fullscreen mode

Essa action será executada na adição de uma nova release. Isso pode ser alterado de acordo com sua preferência. Além disso, utilizei o workflow_dispatch, que permite executar essa action diretamente da interface do GitHub, manualmente. É importante salientar que o GITHUB_TOKEN é gerado automaticamente pelo GitHub. Você pode conferir mais sobre isso aqui.

Passo 5: Criar a nova release

Github Nova release

Preencha as informações de tag e crie a nova release. Isso acionará a execução da action.

Passo 6: Usando o pacote nos seus projetos

Antes de instalar o pacote, siga estas etapas:

  1. Crie um token de acesso pessoal no GitHub para autenticação com a API do GitHub e instalação do seu pacote. Vá em Configurações / Configurações de Desenvolvedor / Token de Acesso Pessoal e gere um novo token com a permissão de leitura.

  2. No projeto onde o pacote será utilizado, crie um arquivo chamado .npmrc na raiz do projeto.

  3. Adicione a seguinte configuração no seu arquivo .npmrc, substituindo <GITHUB_TOKEN> pelo token gerado anteriormente:

//npm.pkg.github.com/:_authToken=<GITHUB_TOKEN>
@organizationName:registry=https://npm.pkg.github.com
Enter fullscreen mode Exit fullscreen mode
  1. Agora, você já pode instalar o pacote no seu projeto utilizando:
  • Via package.json:
"@carloshendvpm/meu-pacote": "1.0.0"
Enter fullscreen mode Exit fullscreen mode
  • Via terminal:
npm install @carloshendvpm/meu-pacote@1.0.0
Enter fullscreen mode Exit fullscreen mode

Conclusão

Espero ter ajudado de alguma forma. Em breve, pretendo trazer um tutorial completo sobre a criação de um package utilizando a Svelte Library. Se tiver alguma sugestão, não hesite em comentar ou me corrigir caso tenha notado algum erro.

Top comments (1)

Collapse
 
ernanej profile image
Ernane Ferreira

Muuito massa! Obrigado por compartilhar. 🚀