Búsqueda de sitios web

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"
  },