node.js - Importera lokalt npm-paket med scope
Mitt monorepo:
/app1
package.json
/app2
package.json
/shared
package.json
Filen shared/package.json har "name": "@company/shared".
Apparnas package.json-filer har beroendet "@company/shared": "file:../shared".
När jag hänvisar till den delade koden vill jag ha en "kort" stil, som också är mindre benägen att gå sönder när saker flyttas runt:
import { foo } from "@company/shared"
Men det fungerar inte, så jag måste göra så här::
import { foo } from "../../../../../shared/src/something"
Jag pillade på både package.json och tsconfig.json utan framgång.
Hur ställer jag in det?
Svar #1
Du bör länka ditt delade paket till dina beroendepaket med npm-link.
cd ~/shared # go into the package directory
npm link # creates global link
cd ~/app1 # go into some other package directory.
npm link @company/shared # link-install the package
detta kommer att instruera npm att installera paketet från den delade mappen, och uppdatera med eventuella ändringar som gjorts i det ursprungliga paketet
för mer information, se https://docs.npmjs.com/cli/link.html
REDIGERA: Jag har först nu insett att du planerar att ladda upp det delade paketet till servern. I så fall kan du använda module-alias-paketet, https://www.npmjs.com/package/module-alias
detta kommer att låta dig göra importer som const sharedModule=require('@shared/moduleName');
REDIGERA #2: För TypeScript, använd https://www.npmjs.com/package/tsconfig-paths
Svar #2
Faktiskt saknas en del i min kod ovan.
Det delade projektet behöver exportera det delade materialet i en index.js (dvs. en "barrel"-fil) och referera till det i package.json:
"main": "dist/index.js",
"types": "dist/index.d.ts",
Och sedan fungerar aliasimportstilen.
