typescript - Exportera undermapp från paketet


Jag har ett Typescript-paket

package.json
src/
  index.ts
  common/
    index.ts
  sub/
    index.ts

Jag vill kunna:

import {...} from '<package>';
import {...} from '<package>/sub';

Men inte för <package>/common

Är det möjligt att göra det utan anpassade deklarationsfiler?

Min package.json ser ut baserat på detta:

"exports": {
  ".": "./dist/index.js",
  "./common": "./dist/common/index.js"
},
"typesVersions": {
  "*": {
    "common": ["declarations/common/index.d.ts"]
  }
}

Med detta tillvägagångssätt har jag inga problem med Typescript-delen. Men när jag försöker bygga det, misslyckas det med JS:

Module not found: Error: Can't resolve '<package>/sub' in '...'

Svar #1

Jag är ärligt talat inte helt säker på varför detta fungerar, men detta block i min package.json fungerade för mig:

{
    // ...
    "files": [
        "/dist"
    ],
    "main": "./dist/index.js",
    "types": "./dist/index.d.ts",
    "exports": {
        ".": "./dist/index.js",
        "./types": "./dist/types/index.js",
        "./generate": "./dist/generate/index.js"
    },
    "typesVersions": {
        "*": {
            "types": [
                "./dist/types/index.d.ts"
            ],
            "generate": [
                "./dist/generate/index.d.ts"
            ]
        }
    }
}

Min tsconfig.json ser ut så här:

{
    "extends": "@tsconfig/node14/tsconfig.json",
    "include": ["src/**/*"],
    "compilerOptions": {
        "lib": ["es2020", "dom"],
        "declaration": true,
        "outDir": "dist",
        "module": "ESNext"
    }
}

Och detta är min filstruktur:

package.json
tsconfig.json
dist/ // and all its subfolders
src/
  generate/
    index.ts
  types/
    index.ts
  index.ts

Relaterade artiklar