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)
