2015-04-23 31 views
6

Używam modułu fs do tworzenia dowiązań symbolicznych.Jak wymusić utworzenie dowiązania symbolicznego przez przesłonięcie istniejącego dowiązania symbolicznego?

fs.symlink("target", "path/to/symlink", function (e) { 
    if (e) { ... } 
}); 

Jeśli już istnieje path/to/symlink, błąd jest wysyłany w wywołaniu zwrotnym.

Jak wymusić tworzenie dowiązań symbolicznych i zastąpić istniejące dowiązanie symboliczne?

Czy istnieje inna alternatywa niż check error + delete existing symlink + try again?

+0

Mogą istnieć moduły, które zapewnią taką funkcjonalność, ale na końcu będą również używać opisanej metody (to lub _ "sprawdź istnienie + usuń, jeśli istnieje + link symboliczny" _). – robertklep

+0

Nie mogę tego zrobić w js, ale w systemie linux można nadpisać dowiązanie symboliczne, więc można wywołać skrypt powłoki z węzła. Źródło: http://serverfault.com/questions/389997/how-to-override-update-a-symlink – vanadium23

+0

@robertklep No cóż, na pewno. Mogę też stworzyć moduł, tylko dla tego, ale byłbym zainteresowany, gdyby był rodzimy sposób. –

Odpowiedz

5

Kiedy

ln -sf target symlink-name 

Jednak przy użyciu narzędzia wiersza polecenia ln możemy to zrobić za pomocą (siła) -f flagi, to nie jest możliwe przy użyciu fs API, chyba że wdrożenie tej funkcji w module.

Utworzono lnf - moduł zastępujący istniejące dowiązania symboliczne.

// Dependencies 
var Lnf = require("lnf"); 

// Create the symlink 
Lnf.sync("foo", __dirname + "/baz"); 

// Override it 
Lnf("bar", __dirname + "/baz", function (err) { 
    console.log(err || "Overriden the baz symlink."); 
}); 

Read the full documentation on the GitHub repository

2

Można utworzyć tymczasowy dowiązania z inną nazwą (unikalne), a następnie zmień jego nazwę.

Użyj fs.symlinkSync(path, tempName), a następnie fs.rename(tempName, name).

Może to być lepsze niż usuwanie pliku, gdy inna aplikacja zależy od jego istnienia (i może przypadkowo uzyskać do niego dostęp, gdy zostanie usunięta, ale jeszcze nie została odtworzona).

Powiązane problemy