Neste artigo, quero mostrar como podemos criar facilmente nosso primeiro pacote npm privado .
Vamos criar e publicar um pacote privado no GitHub , portanto, certifique-se de conhecer os pré- requisitos antes de iniciar este artigo. Então vamos começar.
Pré-requisitos:
crie uma conta no GitHub ( se ainda não tiver )
leia o artigo Como configurar um Node Express com TypeScript
leia o artigo How to Setup a CI CD Pipeline From Scratch with GitHub Actions ( recomendo fortemente que você leia este artigo para entender como o GitHub Actions funciona se você não estiver familiarizado com o GitHub Actions )
O que são pacotes npm privados e onde podem ser usados?
Estrutura do Projeto
math-lib/ --.github/ --workflows/ --main.yml --build/ this is autogenerated folder --src/ --app.ts --types/ --index.d.ts --.gitignore --package.json --tsconfig.json
Etapa 1: inicie um projeto Node.js com TypeScript.
Observação: você pode aprender como fazer isso seguindo este artigo Como configurar um Node Express com TypeScript ou simplesmente clonar este repositório https://github.com/YuraAbharian/node-express-typescript
Etapa 2: agora vamos criar fluxos de trabalho do GitHub Actions.
Crie um diretório .github/workflows
No diretório .github/workflows
, crie um arquivo main.yml
Você pode se familiarizar com os fluxos de trabalho do GitHub Actions seguindo este artigo How to Setup a CI CD Pipeline From Scratch with GitHub
Vamos adicionar algumas configurações:
name: Node.js Private Package on: push: branches: - master jobs: publish-gpr: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v2 with: node-version: '14.x' registry-url: 'https://npm.pkg.github.com/' - run: npm install - run: npm run build - run: npm publish env: NODE_AUTH_TOKEN: ${{secrets.GITHUB_TOKEN}}
Nota : Lembre-se de GITHUB_TOKEN, falaremos mais sobre isso um pouco mais tarde
Passo 3: Vamos criar/atualizar o arquivo src/app.ts
export function sum(a: number, b: number): number { return a + b; } export function minus(a: number, b: number): number { return a - b; } export function divide(a: number, b: number): number { return a / b; } export function multiple(a: number, b: number): number { return a * b; }
Passo 4: Agora precisamos declarar um módulo para nosso pacote
Crie um diretório de types
na raiz do seu projeto
Crie um arquivo index.d.ts
no diretório de types
Adicionar tipos de declaração para este módulo
declare module "@GITHUB_USERNAME/PACKAGE_NAME" { function sum(a: number, b: number): number; function minus(a: number, b: number): number; function divide(a: number, b: number): number; function multiple(a: number, b: number): number; }
Observação:
- GITHUB_USERNAME é seu nome de usuário do github
- PACKAGE_NAME é o nome do seu pacote particular
Exemplo: "@yuraabharian/math-lib"
Etapa 5: vamos trabalhar no arquivo package.json
{ "name": "@GITHUB_USERNAME/PACKAGE_NAME", "version": "1.0.0", "description": "", "main": "./build/app.js", "author": "", "license": "ISC", "types": "./types/index.d.ts", "publishConfig": { "registry": "https://npm.pkg.github.com/" }, "repository": { "url": "git://github.com/GITHUB_USERNAME/PACKAGE_NAME.git" }, "scripts": { "build": "npx tsc" }, "devDependencies": { "@types/node": "^18.0.0", "typescript": "^4.7.4" } }
Exemplo: git://github.com/yuraabharian/math-lib.git (este será um link para seu repositório GitHub)
Observação: esses campos @GITHUB_USERNAME/PACKAGE_NAME são os mesmos da Etapa 4
Etapa 6: vamos configurar nosso ambiente de repositório antes de enviar o código
No Passo 2 eu pedi para você lembrar do GITHUB_TOKEN porque essa variável é muito importante.
Acesse o GitHub Repository - Settings
Etapa 7: vá para Secrets
Etapa 8: Actions
abertas
New repository secret
Necessário: Siga por este link https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token para gerar um novo token.
Nota: Salve o GITHUB_TOKEN em outro lugar porque precisaremos deles na Parte 2 deste artigo .
Nota: Conceda apenas acesso write:packages
para este token
Etapa 9: agora vamos enviar nosso código para o GitHub
Etapa 10: abra o Repositório → Ações e você verá que seu pacote foi implantado
Etapa 11: Para encontrar seu pacote, acesse seu perfil do GitHub → Pacotes
Conclusão da primeira parte: neste ponto você deve ver seu pacote implantado
Na segunda parte deste artigo, aprenderemos como instalar um pacote privado porque requer algumas ações, além npm install package
.
Etapa 1: configurar o projeto Node.js
Observação: você pode ver como fazer isso na Parte 1 → Etapa 1
Passo 2: Em seguida, na raiz do projeto, intsall seu pacote. O link para o seu pacote você pode pegar pelo perfil do GitHub → Packages → math-lib (este é o nome do seu pacote)
Passo 3: Agora vá para o arquivo src/app.ts e atualize-o
import express, {Application, Request, Response} from 'express'; import {sum, minus, multiple, divide} from '@yuraabharian/math-lib'; const app: Application = express(); const PORT: number = 3001; app.use('/sum', (req: Request, res: Response): void => { res.send(`RESULT: ${sum(5, 2)}`, ); }); app.use('/minus', (req: Request, res: Response): void => { res.send(`RESULT: ${minus(2, 2)}`); }); app.use('/multiple', (req: Request, res: Response): void => { res.send(`RESULT: ${multiple(12, 2)}`); }); app.use('/divide', (req: Request, res: Response): void => { res.send(`RESULT: ${divide(10, 2)}`); }); app.listen(PORT, (): void => { console.log('SERVER IS UP ON PORT:', PORT); });
Nota: Lembre-se de que estou importando math-lib do meu repositório @yuraabharian/math-lib para fazer seu modelo parecer @GITHUB_USERNAME/PACKAGE_NAME
Etapa 4: execute seu projeto npm start
node-express-typescript % npm start > [email protected] start > npx tsc && node build/app.js SERVER IS UP ON PORT: 3001
Passo 5 : Vá para o seu navegador e abra http://localhost:3001/sum
Isso funciona, então agora vamos testar todos os métodos:
Resumo: Neste artigo, criamos e testamos seu primeiro pacote npm privado, espero que tenha gostado do meu artigo. Se você tiver alguma dúvida, pode entrar em contato comigo por e-mail, LinkedIn ou nos comentários. Muitas felicidades