typescript npm-pakke - hvordan slippe å importere fra "dist/"


Jeg prøver å lage en nytte npm-pakke. I min src-katalog har jeg en bunke typescript-filer som erklærer flere grensesnitt/typer. For eksempel i src/value-updatable.ts har jeg:

export interface UnaryValueUpdatable<T> {
  value: T;
  onChange: (value: T) => void;
}

Jeg kompilerer hele koden min til dist/, fordi det er en verktøypakke finnes det ingen inngangs- eller hovedfil, jeg vil bare bruke typene i andre prosjekter. Jeg er ikke engang sikker på om kompilering er nødvendig, men problemet er det samme. Når jeg installerer pakken i et annet prosjekt må jeg importere fra dist/ eller src/ i stedet for fra pakkenavnet selv.

For eksempel:

import {UnaryValueUpdatable} from "my-utility-package/dist/UnaryValueUpdatable"

Hvordan må jeg konfigurere pakken min for å eksponere «pen» sti som dette: import {whatever} from "my-utility-package/whatever"?

package.json:

{
  "name": "my-utility-package",
  "version": "1.0.0",
  "files": [
    "dist/**/*"
  ],
  "scripts": {
    "build": "tsc"
  },
  "license": "MIT",
  "dependencies": {
    "typescript": "^3.6.4"
  }
}

tsconfig:

{
  "compilerOptions": {
    "target": "es5",
    "lib": ["dom", "dom.iterable", "esnext"],
    "skipLibCheck": true,
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "strict": true,
    "forceConsistentCasingInFileNames": true,
    "module": "commonjs",
    "outDir": "dist",
    "moduleResolution": "node",
    "resolveJsonModule": true,
    "declaration": true,
    "jsx": "react"
  },
  "include": ["src"],
  "exclude": ["dist"]
}

Svar #1

Du kan opprette kataloger i prosjektets rot som inneholder package.jsons som peker til katalogen du vil eksponere i dist.

Du kan strukturere prosjektet ditt slik:

package.json (for entire project)
src
 | secondary-package-name
   |- index.ts
secondary-package-name
 |- package.json (for secondary-module-name)
dist
 |- generated files

package.json for din sekundære modul trenger bare å inneholde

{
  "name": "package/secondary-package-name",
  "private": true,
  "main": "../dist/secondary-package-name/index.js"
}

å peke tilbake til din dist

Du bør da kunne referere til eksportene fra den sekundære pakken slik:

import { someFn } from "package/secondary-package-name"

forutsatt at det eksporteres fra index.ts-filen i den katalogen

Du må også sørge for at files-feltet i din hovedpackage.json inkluderer den nye katalogen:

"files": [
  "dist",
  "secondary-package-name"
],

(opprinnelig besvart i https://stackoverflow.com/a/62482409/5574183)

Relaterte artikler