2015-04-23 20 views
6

Uso il modulo fs per creare collegamenti simbolici.Come forzare una creazione di collegamenti simbolici sovrascrivendo il collegamento simbolico esistente?

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

Se il path/to/symlink esiste già, un errore viene inviato nella callback.

Come posso forzare la creazione di collegamenti simbolici e sovrascrivere il collegamento simbolico esistente?

Esiste un'alternativa diversa da check error + delete existing symlink + try again?

+0

Ci possono essere moduli che forniranno tale funzionalità, ma alla fine utilizzerà anche il metodo che descrivi (che, o _ "verifica esistenza + elimina se esiste + collegamento simbolico" _). – robertklep

+0

Non so come farlo in js, ma in linux puoi sovrascrivere symlink, quindi puoi chiamare uno script di shell dal nodo. Fonte: http://serverfault.com/questions/389997/how-to-override-update-a-symlink – vanadium23

+0

@robertklep Beh, certo. Posso creare anche un modulo, solo per questa cosa, ma sarei interessato se esiste un modo nativo. –

risposta

5

Quando si utilizza lo strumento di riga di comando ln possiamo fare usando -f (forza) flag

ln -sf target symlink-name 

Tuttavia, questo non è possibile utilizzando il fs API a meno di non implementare questa funzione in un modulo.

Ho creato lnf - un modulo per sovrascrivere i collegamenti simbolici esistenti.

// 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

È possibile creare link simbolico temporaneo con nome diverso (unico) e poi rinominarlo.

Utilizzare fs.symlinkSync(path, tempName) e quindi fs.rename(tempName, name).

Potrebbe essere meglio dell'eliminazione del file quando un'altra applicazione dipende dalla sua esistenza (e potrebbe accidentalmente accedervi quando viene cancellata, ma non ancora ricreata).

Problemi correlati