我使用fs
模塊創建符號鏈接。如果path/to/symlink
已經存在,則在回調中發送錯誤。如何通過覆蓋現有的符號鏈接強制創建符號鏈接?
如何強制符號鏈接創建並覆蓋現有的符號鏈接?
除check error + delete existing symlink + try again
之外是否還有其他替代方案?
我使用fs
模塊創建符號鏈接。如果path/to/symlink
已經存在,則在回調中發送錯誤。如何通過覆蓋現有的符號鏈接強制創建符號鏈接?
如何強制符號鏈接創建並覆蓋現有的符號鏈接?
除check error + delete existing symlink + try again
之外是否還有其他替代方案?
當使用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.");
});
您可以創建不同的(唯一的)名臨時符號連接,然後將其重命名。
使用fs.symlinkSync(path, tempName)
然後fs.rename(tempName, name)
。
當其他應用程序依賴於其存在(並且可能在刪除時尚未重新創建時可能意外訪問它)時,刪除文件可能會更好。
可能有模塊會提供這樣的功能,但最後它還會使用您描述的方法(即「檢查存在+刪除,如果存在+符號鏈接」)。 – robertklep
我不知道如何在js中做到這一點,但在Linux中可以重寫符號鏈接,因此可以從節點調用shell腳本。來源:http://serverfault.com/questions/389997/how-to-override-update-a-symlink – vanadium23
@robertklep嗯,當然。我也可以創建一個模塊,只是爲了這件事,但如果有本地方式,我會感興趣。 –