Ich erstelle eine Knotenbefehlszeilenschnittstelle. Es wird global installiert und verwendet eine Bin-Datei zur Ausführung.
Ich habe vor, ein Befehlsfenster im Stammverzeichnis der Dateien zu öffnen, an denen ich arbeite, und dann einfach den Befehl auszuführen. Ich konnte jedoch das aktuelle Arbeitsverzeichnis nicht ermitteln, da process.cwd()
das Verzeichnis des Knotenpakets zurückgegeben wird. Ich habe anfangs angenommen, dass es unmöglich ist, da der Code mit einer Batch-Datei als Wrapper ausgeführt wird (so können Bin-Dateien am Anfang ohne Knoten ausgeführt werden), aber das Kaffeeskript schafft es. Ich habe mir die Quelle des Kaffeeskripts angesehen, konnte ihr aber nicht folgen (nicht erfahren genug).
Um es selbst zu testen, erstellen Sie ein Paket mit dieser Datei package.json:
{
"name": "test-package",
"version": "1.0.0",
"bin": {
"test-package": "./bin/test-package"
},
"main": "/lib/test"
}
Diese Testpaketdatei in bin:
#!/usr/bin/env node
var path = require('path');
var fs = require('fs');
var lib = path.join(path.dirname(fs.realpathSync(__filename)), '../lib');
require(lib + '/test');
Könnte jemand etwas Licht ins Dunkel bringen?
Versuchen Sie dann, das Befehlszeilenverzeichnis in lib / test abzurufen.
quelle
process.chdir()
es danach eine Möglichkeit, das Original zu erhalten?var originalCwd = process.cwd();
dann Ihr ausführenprocess.chdir()
, und Sie können anschließend zum Original zurückkehren).../lib/test
tragbar?../lib/test
also portabel, während das Windows-Gegenstück..\lib\test
nicht ...Aktuelles Arbeitsverzeichnis
Um das aktuelle Arbeitsverzeichnis abzurufen, können Sie Folgendes verwenden:
Beachten Sie jedoch, dass einige Skripte, insbesondere gulp, das aktuelle Arbeitsverzeichnis mit ändern
process.chdir()
.Knotenmodulpfad
Sie können den Pfad des aktuellen Moduls abrufen mit:
__filename
__dirname
Originalverzeichnis (wo der Befehl initiiert wurde)
Wenn Sie ein Skript über die Befehlszeile ausführen und das ursprüngliche Verzeichnis möchten, in dem das Skript ausgeführt wurde, unabhängig davon, in welchem Verzeichnis das Skript gerade ausgeführt wird, können Sie Folgendes verwenden:
Originalverzeichnis bei der Arbeit mit NPM-Skripten
Manchmal ist es wünschenswert, ein NPM-Skript im aktuellen Verzeichnis und nicht im Stammverzeichnis des Projekts auszuführen.
Diese Variable ist in npm-Paketskripten verfügbar als:
Sie müssen eine aktuelle Version von NPM ausführen. Wenn diese Variable nicht verfügbar ist, stellen Sie sicher, dass NPM auf dem neuesten Stand ist.
Auf diese Weise können Sie auf den aktuellen Pfad in Ihrer package.json zugreifen, z.
quelle
process.env.INIT_CWD
gibt daspackage.json
Wenn Sie alternativ nur das aktuelle Verzeichnis des aktuellen NodeJS-Skripts abrufen möchten, können Sie auch etwas Einfaches ausprobieren. Beachten Sie, dass dies in der Node CLI selbst nicht funktioniert:
quelle
path.resolve('.')
ist auch eine zuverlässige und saubere Option, weil wir fast immerrequire('path')
. Sie erhalten den absoluten Pfad des Verzeichnisses, von dem aus es aufgerufen wird.quelle
Folgendes hat bei mir funktioniert:
quelle