730 Stimmen

Lokale Abhängigkeit in package.json

Ich möchte etwas in dieser Art machen, also npm install installiert auch die package.json de ../somelocallib oder, was noch wichtiger ist, seine Abhängigkeiten.

"dependencies": {
    "express": "*",
    "../somelocallib": "*"
}

20voto

William Entriken Punkte 33360

Gesamtprojekt

Hier ist die package.json, die Sie für das Masterprojekt verwenden werden:

"dependencies": {
    "express": "*",
    "somelocallib": "file:./somelocallib"
}

Dort, ./somelocallib ist der Verweis auf den Bibliotheksordner als relativ zum Masterprojekt package.json .

Referenz: https://docs.npmjs.com/cli/v7/configuring-npm/package-json#local-paths


Teilprojekt

Verwalten Sie Ihre Bibliotheksabhängigkeiten.

Zusätzlich zum Betrieb npm install müssen Sie Folgendes ausführen (cd node_modules/somelocallib && npm install) .

Dies ist ein bekannter Fehler von NPM.

Referenz: https://github.com/npm/npm/issues/1341 (auf der Suche nach einer aktuelleren Referenz)


Hinweise für Docker

Checken Sie Ihren Master ein package.lock und Ihr somelocallib/package.lock in Ihren Quellcode-Manager ein.

Dann verwenden Sie in Ihrem Dockerfile:

FROM node:10
WORKDIR /app
# ...
COPY ./package.json ./package-lock.json ./
COPY somelocallib somelocallib
RUN npm ci
RUN (cd node_modules/zkp-utils/ && npm ci)
# ...

Ich verwende Klammern in meinem (cd A && B) Konstrukte, um die Operation idempotent zu machen.

14voto

itsazzad Punkte 6337

Zwei Schritte für eine vollständige lokale Entwicklung:

  1. Geben Sie den Pfad zu dem lokalen Verzeichnis an, das das Paket enthält.
{
  "name": "baz",
  "dependencies": {
    "bar": "file:../foo/bar"
  }
}
  1. Symlink zum Paketordner

    cd ~/projects/node-redis    # go into the package directory
    npm link                    # creates global link
    cd ~/projects/node-bloggy   # go into some other package directory.
    npm link redis              # link-install the package

12voto

balieu Punkte 129

Hier in 2020, auf einem Windows 10 arbeitend, habe ich versucht mit

"dependencies": {
    "some-local-lib": "file:../../folderY/some-local-lib" 
    ...
}

Dann wird eine npm installieren. Das Ergebnis ist, dass eine Verknüpfung zu dem Ordner in node-modules . Das funktioniert nicht. Sie brauchen einen Hard Link - den Windows unterstützt, aber Sie müssen in Windows etwas Besonderes tun, um einen harten Symlink zu erstellen.

Da ich nicht wirklich einen harten Link haben möchte, habe ich stattdessen eine URL verwendet:

"dependencies": {
    "some-local-lib": "file:///D:\\folderX\\folderY\\some-local-lib.tar" 
     ....
}

Und das funktioniert sehr gut.
Das tar (man muss das Zeug im Build/Dist-Ordner der Bibliothek entpacken) wird in einen echten Ordner in node-modules extrahiert, und man kann es wie alles andere importieren.
Natürlich ist der tar-Teil etwas lästig, aber da es sich bei "some-local-lib" um eine Bibliothek handelt (die sowieso gebaut werden muss), ziehe ich diese Lösung der Erstellung eines Hardlinks oder der Installation eines lokalen npm vor.

7voto

Eliav Louski Punkte 1867

Arbeitsbereiche nutzen

der Nachteil bei der Verwendung der file:../path/to/your-library ist, dass Sie entweder npm install oder mit npm link um die Änderungen in den Paketen, die Ihr Paket importieren, wirksam werden zu lassen.

wenn Sie pnpm verwenden: eine bessere Lösung ist die Verwendung von workspace: Protokoll : workspace:../path/to/your-library . es wird das Verzeichnis zu Ihren node_modules symlinken, anstatt es zu kopieren, so dass alle Änderungen an der Quelle sofort wirksam werden.

zum Beispiel:

  ...
  "dependencies": {
    ...
    "my-package": "workspace:../../dist"
  },

Hinweis: Diese Lösung ist für die Verwendung in einem Arbeitsbereich vorgesehen, daher müssen Sie möglicherweise pnpm-workspace.yaml (auch eine leere) Datei in der Wurzel Ihres Projekts.

6voto

Shreyash Shetty Punkte 103

Mit Garn kann man es so machen

yarn add file:../somelocallib

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X