Drucken Sie eine Liste aller installierten node.js-Module


134

In einem node.js-Skript, an dem ich arbeite, möchte ich alle node.js-Module (installiert mit npm) in die Befehlszeile drucken. Wie kann ich das machen?

console.log(__filename);

//now I want to print all installed modules to the command line. How can I do this?

In diesem Fall kann es hilfreich sein, eine Funktion zu schreiben, die den Pfad des Modulordners node.js zurückgibt (sofern dies möglich ist). Eine plattformübergreifende Lösung wäre ideal.
Anderson Green

Informationen zum Abrufen
Anderson Green

Antworten:


100

Verwenden Sie npm ls (es gibt sogar json-Ausgabe)

Aus dem Skript:

test.js:

function npmls(cb) {
  require('child_process').exec('npm ls --json', function(err, stdout, stderr) {
    if (err) return cb(err)
    cb(null, JSON.parse(stdout));
  });
}
npmls(console.log);

Lauf:

> node test.js
null { name: 'x11', version: '0.0.11' }

Wie können Sie auch den Dateipfad des Modulordners erhalten?
Anderson Green

Pfad wäre node_modules / [Modulname]. Ich glaube, das sollte auf allen Plattformen funktionieren. Beachten Sie, dass auf diese Weise nur der 'lokale' Modulbaum gedruckt wird und requrezuerst node_modules, dann ../node_modules, ../../node_modules (siehe nodejs.org/api/… ) und dann NODE_PATH env var
Andrey betrachtet Sidorov

4
versuchen Sie npm ls --parseablefür nur Liste der Pfade
Andrey Sidorov

262

Wenn Sie nur an den global installierten Paketen ohne den vollständigen BAUM interessiert sind, dann:

npm -g ls --depth=0

oder lokal (weglassen -g):

npm ls --depth=0


6
Ich mag es auch --l oder --long anzugeben , npm -g ls --depth=0 --long. Hier finden Sie die Modulbeschreibungen und Github-Links.
Adam Caviness

Wenn Sie npm lsvollständige Beispiele mögen, überprüfen Sie dies: stackoverflow.com/questions/17937960/…
prosti

48

Liste aller global installierten Module von Drittanbietern, schreiben Sie in die Konsole:

 npm -g ls


9

Im Allgemeinen gibt es zwei Möglichkeiten, installierte Pakete aufzulisten - über die Befehlszeilenschnittstelle (Command Line Interface, CLI ) oder in Ihrer Anwendung mithilfe der API .

Beide Befehle werden stdoutin einer Baumstruktur auf alle Versionen der installierten Pakete sowie deren Abhängigkeiten gedruckt .


CLI

npm list

Verwenden Sie das -g(globale) Flag, um alle global installierten Pakete aufzulisten. Verwenden Sie das --depth=0Flag, um nur die Top-Pakete und nicht deren Abhängigkeiten aufzulisten.


API

In Ihrem Fall möchten Sie dies in Ihrem Skript ausführen, sodass Sie die API verwenden müssen. Aus den Dokumenten:

npm.commands.ls(args, [silent,] callback)

Zusätzlich zum Drucken an stdoutwerden die Daten auch an den Rückruf übergeben.


Vielen Dank, dass Sie angegeben haben, dass npm über eine API verfügt, auf die über Anwendungen zugegriffen werden kann. Wie übergeben Sie Argumente an die Funktionen? Ich habe es versucht, npm.commands.ls(["depth=0"], ... )aber es gibt mir Fehler und npm.commands.ls(["prod"], ... )gibt mir ein leeres Array ....
Giuliano Collacchioni

6

Warum greifen sie nicht von dependenciesin package.json?

Natürlich erhalten Sie nur die, die Sie tatsächlich gespeichert haben, aber das sollten Sie trotzdem tun.

console.log(Object.keys(require('./package.json').dependencies));

Damit erhalten Sie keine global installierten Pakete
Owen J Lamb

Die ursprüngliche Frage gibt nicht an, ob global installierte Pakete enthalten sein sollen oder nicht. Diese Antwort bietet eine hilfreiche Alternative zu den anderen Antworten.
Andy Fleming

3
for package in `sudo npm -g ls --depth=0 --parseable`; do
    printf "${package##*/}\n";
done

1
Ja, alle meine Bash heute hat$()
AT
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.