El desarrollo moderno de paquetes en Node.js ha evolucionado significativamente con la introducción de mapas de exportación e integración con TypeScript. Esta guía cubre todo lo que necesitas saber sobre la configuración de exportaciones en tu package.json.
Para usar estas características, necesitarás:
typeExports
y resolución adecuada de módulos)El campo exports en package.json define los puntos de entrada para tu paquete:
{
"name": "my-package",
"exports": {
".": {
"types": "./dist/index.d.ts",
"import": "./dist/index.mjs",
"require": "./dist/index.cjs"
}
}
}
Puedes exponer múltiples puntos de entrada con condiciones específicas:
{
"name": "my-package",
"exports": {
".": {
"types": "./dist/index.d.ts",
"import": "./dist/index.mjs",
"require": "./dist/index.cjs"
},
"./utils": {
"types": "./dist/utils/index.d.ts",
"import": "./dist/utils/index.mjs",
"require": "./dist/utils/index.cjs"
},
"./components/*": {
"types": "./dist/components/*.d.ts",
"import": "./dist/components/*.mjs",
"require": "./dist/components/*.cjs"
}
}
}
TypeScript 4.7+ introdujo soporte mejorado para exportaciones de paquetes:
{
"name": "my-package",
"exports": {
".": {
"types": "./types/index.d.ts",
"import": {
"types": "./types/index.d.mts",
"default": "./dist/index.mjs"
},
"require": {
"types": "./types/index.d.cts",
"default": "./dist/index.cjs"
}
}
}
}
Los mapas de exportación modernos permiten un mejor tree shaking:
// Antes (potencialmente incluye todas las utilidades)
import { specific } from 'my-package/utils';
// Después (con exportaciones apropiadas)
import { specific } from 'my-package/utils/specific';
Ejemplo de una configuración compatible con tree shaking:
{
"exports": {
"./utils/*": {
"types": "./dist/utils/*.d.ts",
"import": "./dist/utils/*.mjs"
}
}
}
Para mantener compatibilidad con versiones anteriores de Node.js, mantén los campos tradicionales:
{
"name": "my-package",
"main": "./dist/index.cjs",
"module": "./dist/index.mjs",
"types": "./dist/index.d.ts",
"exports": {
// ... configuración moderna de exportaciones
}
}
Los mapas de exportación son poderosos pero requieren una consideración cuidadosa del entorno de tus usuarios. Al implementar estas características, asegúrate siempre de realizar pruebas en diferentes versiones de Node.js y TypeScript.