2015-04-23 73 views
6

我使用fs模塊創建符號鏈接。如果path/to/symlink已經存在,則在回調中發送錯誤。如何通過覆蓋現有的符號鏈接強制創建符號鏈接?

如何強制符號鏈接創建並覆蓋現有的符號鏈接?

check error + delete existing symlink + try again之外是否還有其他替代方案?

+0

可能有模塊會提供這樣的功能,但最後它還會使用您描述的方法(即「檢查存在+刪除,如果存在+符號鏈接」)。 – robertklep

+0

我不知道如何在js中做到這一點,但在Linux中可以重寫符號鏈接,因此可以從節點調用shell腳本。來源:http://serverfault.com/questions/389997/how-to-override-update-a-symlink – vanadium23

+0

@robertklep嗯,當然。我也可以創建一個模塊,只是爲了這件事,但如果有本地方式,我會感興趣。 –

回答

5

當使用ln命令行工具,我們可以做到這一點使用-f(力)標誌

ln -sf target symlink-name 

然而,使用fs API,除非我們實現一個模塊中此功能,這是不可能的。

我創建了lnf - 用於覆蓋現有符號鏈接的模塊。

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

您可以創建不同的(唯一的)名臨時符號連接,然後將其重命名。

使用fs.symlinkSync(path, tempName)然後fs.rename(tempName, name)

當其他應用程序依賴於其存在(並且可能在刪除時尚未重新創建時可能意外訪問它)時,刪除文件可能會更好。