我使用fs
模块创建符号链接。
fs.symlink("target", "path/to/symlink", function (e) {
if (e) { ... }
});
如果path/to/symlink
已存在,则会在回调中发送错误。
如何强制创建符号链接并覆盖现有的符号链接?
除了check error + delete existing symlink + try again
还有其他选择吗?
答案 0 :(得分:14)
使用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.");
});
答案 1 :(得分:3)
您可以使用不同(唯一)名称创建临时符号链接,然后重命名。
使用fs.symlinkSync(path, tempName)
然后fs.rename(tempName, name)
。
当其他应用程序依赖于其存在时,它可能比删除文件更好(并且在删除文件时可能会意外地访问它,但尚未重新创建)。