node.js - Paquete NPM con exports no se carga en TypeScript
Nuestra biblioteca necesita funcionar tanto para proyectos que usan módulos ESM como CommonJS. Por lo tanto, la construimos con 3 configuraciones diferentes: ESM, node16 y tipos.
Esta configuración funciona para proyectos de JavaScript con node. Tanto para CommonJS como para ESM (cuando se pone "type": "module" en package.json).
Sin embargo, al intentar usar la biblioteca en un proyecto de Typescript, obtengo el siguiente error
Cannot find module '@ltonetwork/lto' or its corresponding type declarations.
¿Qué está mal con esta configuración?
Configuración de TypeScript
ESM
{
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "lib/esm",
"module": "ESNext",
"moduleResolution": "bundler"
}
}
CommonJS
{
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "lib/cjs",
"module": "node16",
"moduleResolution": "node16"
}
}
Tipos (.d.ts archivos)
{
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "lib/types",
"declaration": true,
"module": "node16",
"moduleResolution": "node16",
"emitDeclarationOnly": true
}
}
package.json
En package.json, uso exports para especificar qué archivo cargar
"exports": {
".": {
"types": "./lib/types/index.d.ts",
"require": "./lib/cjs/index.js",
"import": "./lib/esm/index.js",
"default": "./lib/esm/index.js"
},
"./accounts": {
"types": "./lib/types/accounts/index.d.ts",
"require": "./lib/cjs/accounts/index.js",
"import": "./lib/esm/accounts/index.js",
"default": "./lib/esm/accounts/index.js"
},
"./types": "./lib/types/index.d.ts",
"./constants": "./lib/constants.js",
"./package.json": "./package.json"
},