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.

Relaterade artiklar