En este artículo, quiero mostrar cómo podemos crear fácilmente nuestro primer paquete npm privado .
Vamos a crear y publicar un paquete privado en GitHub , así que asegúrese de familiarizarse con los requisitos previos antes de comenzar este artículo. Entonces empecemos.
requisitos previos:
crea una cuenta de GitHub ( si aún no la tienes )
lea el artículo Cómo configurar un Node Express con TypeScript
lea el artículo Cómo configurar una canalización de CD de CI desde cero con acciones de GitHub ( le recomiendo que lea este artículo para comprender cómo funcionan las acciones de GitHub si no está familiarizado con las acciones de GitHub )
¿Qué son los paquetes npm privados y dónde se pueden usar?
Estructura del proyecto
math-lib/ --.github/ --workflows/ --main.yml --build/ this is autogenerated folder --src/ --app.ts --types/ --index.d.ts --.gitignore --package.json --tsconfig.json
Paso 1: Inicie un proyecto de Node.js con TypeScript.
Nota: Puede aprender cómo hacer esto siguiendo este artículo Cómo configurar un Node Express con TypeScript o simplemente puede clonar este repositorio https://github.com/YuraAbharian/node-express-typescript
Paso 2: Ahora vamos a crear flujos de trabajo de GitHub Actions.
Crear un directorio .github/workflows
En el directorio .github/workflows
, cree un archivo main.yml
Puede familiarizarse con los flujos de trabajo de GitHub Actions siguiendo este artículo Cómo configurar una canalización de CD de CI desde cero con GitHub
Agreguemos algunas configuraciones:
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 : Recuerde GITHUB_TOKEN, hablaremos más sobre esto un poco más tarde.
Paso 3: Vamos a crear/actualizar el archivo 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; }
Paso 4: Ahora necesitamos declarar un módulo para nuestro paquete
Cree un directorio de types
en la raíz de su proyecto
Cree un archivo index.d.ts
en el directorio de types
Agregar tipos de declaración 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; }
Nota:
- GITHUB_USERNAME es tu nombre de usuario de github
- PACKAGE_NAME es el nombre de tu paquete privado
Ejemplo: "@yuraabharian/math-lib"
Paso 5: Trabajemos en el archivo 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" } }
Ejemplo: git://github.com/yuraabharian/math-lib.git (este será un enlace a su repositorio de GitHub)
Nota: estos campos @GITHUB_USERNAME/PACKAGE_NAME son los mismos que en el Paso 4
Paso 6: configuremos nuestro entorno de repositorio antes de enviar el código
En el Paso 2 te pedí que recordaras GITHUB_TOKEN porque esta variable es muy importante.
Ir al GitHub Repository - Settings
Paso 7: luego ve a Secrets
Paso 8: Actions
abiertas
New repository secret
Obligatorio: siga este enlace https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token para generar un nuevo token.
Nota: Guarde el GITHUB_TOKEN en otro lugar porque los necesitaremos en la Parte 2 de este artículo .
Nota: Otorgue solo acceso de write:packages
para este token
Paso 9: ahora envíemos nuestro código a GitHub
Paso 10: Abra el Repositorio → Acciones y debería ver que su paquete ha sido implementado
Paso 11: Para encontrar su paquete, vaya a su perfil de GitHub → Paquetes
Conclusión de la primera parte: en este punto debería ver su paquete implementado
En la segunda parte de este artículo, aprenderemos cómo instalar un paquete privado porque requiere algunas acciones, además de npm install package
.
Paso 1: configurar el proyecto Node.js
Nota: Puede ver cómo hacerlo en la Parte 1 → Paso 1
Paso 2: Luego, en la raíz del proyecto, instale todo su paquete. Puede tomar el enlace a su paquete mediante el perfil de GitHub → Paquetes → math-lib (este es el nombre de su paquete)
Paso 3: ahora ve al archivo src/app.ts y actualízalo
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: tenga en cuenta que estoy importando math-lib desde mi repositorio @yuraabharian/math-lib para que su plantilla se vea como @GITHUB_USERNAME/PACKAGE_NAME
Paso 4: Ejecute su proyecto npm start
node-express-typescript % npm start > [email protected] start > npx tsc && node build/app.js SERVER IS UP ON PORT: 3001
Paso 5 : Vaya a su navegador y abra http://localhost:3001/sum
Esto funciona, así que ahora probemos todos los métodos:
Resumen: en este artículo, creamos y probamos su primer paquete npm privado, espero que haya disfrutado mi artículo. Si tiene alguna pregunta, puede contactarme por correo electrónico, LinkedIn o en los comentarios. Los mejores deseos