Tworzę interfejs wiersza poleceń węzła. Jest instalowany globalnie i do wykonania używa pliku bin.
Planuję otworzyć okno poleceń w katalogu głównym plików, nad którymi pracuję, a następnie po prostu uruchomić polecenie, jednak nie mogłem określić bieżącego katalogu roboczego, ponieważ zwracam process.cwd()
katalog pakietu węzła. Początkowo zakładałem, że skoro kod jest wykonywany przy użyciu pliku wsadowego jako opakowania (w ten sposób pliki bin mogą działać bez węzła na początku), to jest to niemożliwe, ale coffee-script udaje się to zrobić. Rzuciłem okiem na źródło skryptu kawy, ale nie mogłem go śledzić (nie miałem wystarczającego doświadczenia).
Aby przetestować to samodzielnie, utwórz pakiet z tym plikiem package.json:
{
"name": "test-package",
"version": "1.0.0",
"bin": {
"test-package": "./bin/test-package"
},
"main": "/lib/test"
}
ten plik pakietu testowego w 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');
Czy ktoś mógłby rzucić na to trochę światła.
a następnie spróbuj pobrać katalog wiersza poleceń wewnątrz lib / test.
źródło
process.chdir()
jest jakiś sposób na zdobycie oryginału?var originalCwd = process.cwd();
następnie wykonaj swojeprocess.chdir()
i możesz później wrócić do oryginału).../lib/test
przenośny?../lib/test
jest przenośny, podczas gdy odpowiednik Windowsa..\lib\test
nie jest ...Aktualny katalog roboczy
Aby uzyskać bieżący katalog roboczy, możesz użyć:
Należy jednak pamiętać, że niektóre skrypty, w szczególności gulp, zmienią bieżący katalog roboczy z
process.chdir()
.Ścieżka modułu węzła
Możesz uzyskać ścieżkę do bieżącego modułu za pomocą:
__filename
__dirname
Katalog oryginalny (gdzie zainicjowano polecenie)
Jeśli uruchamiasz skrypt z wiersza poleceń i chcesz mieć oryginalny katalog, z którego skrypt został uruchomiony, niezależnie od katalogu, w którym skrypt aktualnie działa, możesz użyć:
Oryginalny katalog podczas pracy ze skryptami NPM
Czasami pożądane jest uruchomienie skryptu NPM w bieżącym katalogu, a nie w katalogu głównym projektu.
Ta zmienna jest dostępna w skryptach pakietu npm jako:
Musisz używać najnowszej wersji NPM. Jeśli ta zmienna nie jest dostępna, upewnij się, że NPM jest aktualny.
Umożliwi to dostęp do bieżącej ścieżki w pliku package.json, na przykład:
źródło
process.env.INIT_CWD
zwraca reż zpackage.json
Alternatywnie, jeśli chcesz uzyskać wyłącznie bieżący katalog bieżącego skryptu NodeJS, możesz spróbować czegoś prostego. Zauważ, że to nie zadziała w samym interfejsie wiersza polecenia węzła:
źródło
path.resolve('.')
jest również niezawodną i czystą opcją, ponieważ prawie zawszerequire('path')
. Poda ci bezwzględną ścieżkę do katalogu, z którego jest wywołany.źródło
Oto, co zadziałało dla mnie:
źródło