如何通过覆盖现有的符号链接来强制创建符号链接?

时间:2015-04-23 09:56:45

标签: node.js symlink

我使用fs模块创建符号链接。

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

如果path/to/symlink已存在,则会在回调中发送错误。

如何强制创建符号链接并覆盖现有的符号链接?

除了check error + delete existing symlink + try again还有其他选择吗?

2 个答案:

答案 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.");
});

Read the full documentation on the GitHub repository

答案 1 :(得分:3)

您可以使用不同(唯一)名称创建临时符号链接,然后重命名。

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

当其他应用程序依赖于其存在时,它可能比删除文件更好(并且在删除文件时可能会意外地访问它,但尚未重新创建)。