Suchen Sie die Datei package.json in einem npm-Skript, das bei der Vorinstallation ausgeführt wird

8

Also muss ich die package.json lesen, bevor ich ein neues Paket über npm installiere.

Warum packe.json überhaupt lesen?

Ich verwende npm für CSS-Komponenten, die einzeln versioniert sind und Abhängigkeiten haben können. (Es wird kein Javascript geliefert)

Wenn ich nach Versionskonflikten für eine Reihe von Abhängigkeiten suche, muss ich erkennen, ob package A package [email protected] benötigt und package B erfordert package [email protected] und damit umgehen.

Npm (ab Version 3) behandelt diese Probleme, indem ein konfliktbehaftetes Modul tiefer in den Baum verschachtelt wird. Sie haben jetzt beide Versionen des gleichen Moduls. CSS hat einen globalen Namespace und ein Mixin (in Sasss Fall) würde sich dann gegenseitig überschreiben und Ihr CSS brechen.

Dieses Problem mit der flachen Abhängigkeit wird im npm-Blog perfekt beschrieben: Ссылка

Selbst wenn wir unseren speziellen Anwendungsfall nicht berücksichtigen, fällt es mir seltsam auf, dass Sie keinen Zugriff auf die Skripte package.json in preinstall und postinstall haben. Sie scheinen nur für diesen Anwendungsfall zu sein.

Was ich versucht habe

Mein package.json des Pakets, das ich installiere, sieht so aus:

%Vor%

Innerhalb dieses some-script -Pakets starte ich:

%Vor%

Ich fahre dann:

%Vor%

Dies führt zu:

%Vor%

Jetzt bekomme ich wirklich heraus, dass ich nicht wirklich auf das root von wo npm i ausgeführt wurde zugreifen konnte, weil mein Skript von einem Subprozess von npm ausgeführt wurde und eine ganz andere Wurzel hat.

Ich dachte dann, dass npm root verfolgen sollte, wo die tatsächliche Wurzel für mich war und übergab es als Parameter an mein Skript aus dem Testmodul package.json:

%Vor%

Leider wird auch standardmäßig auf einen Bereitstellungspfad zurückgesetzt:

%Vor%

Ich habe ein Problem bei der Registry angemeldet, aber ich hoffe nicht, dass sie rechtzeitig dazu kommen . Auch mein Skript muss auf älteren npm Installationen arbeiten.

In der Zwischenzeit habe ich etwas in meinem some-script :

gefunden %Vor%

Das gibt /path/to/folder/ zurück, was korrekt ist, aber es macht die Annahme, dass niemand einen npm i in einem Ordner namens node_modules ... Scheint Hacky.

Frage

Wie kann ich auf den Pfad zu package.json innerhalb eines npm-Skripts zugreifen, das über die Vorinstallation ausgeführt wird? Das scheint für mich etwas zu sein, das nicht zu unerhört ist, um es zu verlangen?

    
Dominik 21.12.2016, 23:14
quelle

1 Antwort

2

Ich verstehe Ihren Anwendungsfall nicht vollständig, sondern um Ihre spezifische Frage zu beantworten, wie Sie ein Elternteil package.json von einem Vorinstallations-Skript finden:

Übergeben Sie $(cd .. && npm prefix) als Argument an Ihr Skript und laden Sie dann ./package.json .

npm prefix gibt das nächste übergeordnete Verzeichnis zurück, das eine package.json -Datei enthält, die beim Aufruf von% Das Verzeichnis "co_de%" sollte den Pfad des übergeordneten npm-Pakets zurückgeben.

%Vor%     
wjordan 10.01.2017, 16:41
quelle

Tags und Links