Hoy vamos a crear una librería de React de una forma más sencilla y sin utilizar otras librerías. Solo usaremos el compilador MicroBundle.
Lo primero que tenemos que hacer es crear un proyecto nuevo React, usaremos TypeScript:
npx create-react-app my-react-library --template typescript
Ahora crearemos una nueva carpeta dentro de src llamada components y crearemos un componente de ejemplo llamado Button.tsx
import React from 'react'; interface BotonProps { texto: string; } const Boton: React.FC<BotonProps> = ({ texto }) => { return <button>{texto}</button>; }; export default Boton;
Ahora vamos a index.tsx y sustituimos todo por:
export { default as Button } from './components/Button';
*Es importante usar la ruta de ./ y no utilizar la ruta @/ para evitar errores al importar la librería.
Ahora configuramos package.json, añadimos lo siguiente a lo que ya tenemos:
{ "name": "my-react-library", "version": "1.0.0", "description": "Descripcion libreria", "author": "Tu Nombre", "license": "MIT", "repository": "Repositorio", "main": "dist/index.cjs.js", "module": "dist/index.esm.js", "types": "dist/index.d.ts", "source": "src/index.tsx", "scripts": { "build": "microbundle-crl --no-sourcemap" }, "peerDependencies": { "react": "^18.3.1", "react-dom": "^18.3.1" } }
Instalar microbundle:
npm install --save-dev microbundle-crl
Y ahora nuestro tsconfig.json debería ser:
{ "compilerOptions": { "target": "es5", "lib": [ "dom", "dom.iterable", "esnext" ], "allowJs": true, "skipLibCheck": true, "esModuleInterop": true, "allowSyntheticDefaultImports": true, "strict": true, "forceConsistentCasingInFileNames": true, "noFallthroughCasesInSwitch": true, "module": "esnext", "moduleResolution": "node", "resolveJsonModule": true, "isolatedModules": true, "noEmit": false, "declaration": true, "jsx": "preserve", "baseUrl": "./", "paths": { "@/*": [ "./src/*" ] } }, "include": ["src/**/*"] }
Ahora ya podemos ejecutar:
npm run build
Y nos creará la libería.
Si añadimos una libería externa debemos declararla dentro de package.json:
"external": [ "@mui/material" ], "peerDependencies": { "@mui/material": "^5.0.0" },
Si queremos crear un enlace para importarla de forma local en otro proyecto haremos lo siguiente:
- Vamos a la carpeta raíz de la librería creada y en el mismo directorío dónde está package.json ejecutamos:
npm link
Y ahora para usarlo en nuestro proyecto local, pondremos:
npm link my-react-library
Y podremos utilizarla de la siguiente forma:
import { Button } from 'my-react-library'; const App = () => { return ( <div> <Button texto="Click Me" /> </div> ); }; export default App;
Para subir una versión al packete:
npm version patch