2013-05-23 13 views
6

Mam prosty program, który można uruchomić z wiersza poleceń. Ten program służy do podglądu plików obniżających na żywo. kiedy jestem pakowania aplikację zJak uzyskać katalog roboczy w węźle-webkit

cat $NW/nw marknow.nw > marknow 

i działa z innej lokalizacji:

./build/marknow ../relative/path/to/file.md 

nie mogę uzyskać bieżący katalog roboczy.

process.cwd() 

powraca/tmp/coś ???

Jak mogę uzyskać katalog roboczy w webmicie? Katalog, z którego wywołano ./build/marknow ../relative/path/to/file.md.

+1

process.cwd() zwraca dokładnie to, czego szukam, absolutną ścieżkę, może to była starsza wersja węzła-webkita? – Maslow

+0

@Maslow: W takim przypadku myślę, że może nie szukałeś cwd w tradycyjnym znaczeniu tego terminu - który jest katalogiem, w którym proces został uruchomiony przez użytkownika (który zwykle jest inny niż katalog, w którym jest zainstalowana aplikacja) . Czy możesz to potwierdzić? – LOAS

Odpowiedz

6

myślę cwd dostaje 2 różne znaczenia:

  1. katalog, w którym aplikacja mieszka
  2. katalog, w którym użytkownik uruchomi aplikację z

W skryptów powłoki I can see the 2nd meaning applied, ale node- społeczność webkitów seems to be using the 1st

Popraw mnie, jeśli się mylę, bu t Myślę, że szukasz drugiego: ścieżki, w której użytkownik dzwonił do Twojej aplikacji.

Po kilku testach w końcu znalazł sposób, który pracuje dla mnie:

process.env.PWD

+1

process.env.PWD nie wydaje się być dostępne, gdy budujesz swój projekt do pliku wykonywalnego. – squaretone

+0

@ akwaretone: Czy zaobserwowałeś to w kompilacji Windowsa? Zrobiłem kompilację dla mac, w której plik process.env.PWD zawierał ścieżkę do katalogu, w którym znajdowałem się po uruchomieniu aplikacji. – LOAS

+0

Nie przypominam sobie. Pracowałem na obu, ale przede wszystkim na Windows. – squaretone

13

Inną opcją może spróbować jeśli CWD nie wydaje się do pracy jest coraz katalog wykonanie czegoś takiego:

var path = require('path'); 
var execPath = path.dirname(process.execPath); 

To powinno Ci katalog wykonania z exe. cwd pobiera katalog tymczasowy ze względu na sposób obsługi plików przez węzeł-webkit podczas otwierania plików z katalogu tymczasowego przy każdym uruchomieniu.

+2

path.dirname (process.execPath) wskazuje katalog ./build/ nie na bieżący katalog roboczy. –

+1

Aby uniknąć scapes użyj 'execPath.replace (/ \\/g,"/");' –

1

Jak wskazano w innych odpowiedzi, węzeł-WebKit rozpoczyna się proces węzła z niewłaściwym „bieżącego katalogu roboczego” (i tak z perspektywy wiersza poleceń).

Jak wskazano w innym miejscu, process.env.PWD w rzeczywistości zawiera to, co chcemy (gdy aplikacja jest uruchamiana z wiersza poleceń). Prosty obejście mogłyby być następnie wykonać następujące czynności w swoim index.html (lub jakieś inne miejsce, które pobiera wykonywane wcześnie):

<script type="text/javascript"> 
    if(process.env.PWD) { 
    process.chdir(process.env.PWD); 
    } 
</script> 

Presto! Teraz process.cwd() zwraca właściwą rzecz.

Podobno ta sztuczka działa tylko w przypadku aplikacji uruchamianych z wiersza poleceń - ale z drugiej strony jest to prawdopodobnie konieczne tylko po uruchomieniu aplikacji z wiersza poleceń.

Jest to bilet na ten problem, ale jest old and dusty

1

Jeśli wszystkie odpowiedzi były niepowodzeniem, spróbuj tego.

  1. Utwórz plik "main.js" i skopiuj ten kod.

    // get child_process module. 
    var childproc = require('child_process'); 
    
    // start process using child_process 
    // with current path string 
    // '__dirname' would be not only path 
    // of 'main.js' but also one of 'app.zip' 
    // because 'main.js' and 'app.zip' have same directory 
    childproc.exec('nw app.zip ' + __dirname); 
    
  2. Dodaj ten kod, który chcesz uzyskać bieżącą ścieżkę

    // get 'nw.gui' module 
    var gui = require('nw.gui'); 
    
    // get arguments that we passed 
    var arr = gui.App.argv; 
    
    // nw app.zip __dirname 
    //   ^argv[0] 
    alert('current path: [' + arr[0] + ']'); 
    
  3. Run "main.js" z node.js

napisałem „Jak uzyskać prąd katalog (aktualna ścieżka) przy użyciu webkita ".

http://hdnua.tistory.com/16

Robi wykonywania katalogu plik ZIP za.