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

Ion*_*zău 11 symlink node.js

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

fs.symlink("target", "path/to/symlink", function (e) {
   if (e) { ... }
});
Run Code Online (Sandbox Code Playgroud)

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

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

还有另一种选择check error + delete existing symlink + try again吗?

Ion*_*zău 22

使用ln命令行工具时,我们可以使用-f(强制)标志执行此操作

ln -sf target symlink-name
Run Code Online (Sandbox Code Playgroud)

但是,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.");
});
Run Code Online (Sandbox Code Playgroud)

阅读GitHub存储库的完整文档


Joh*_*man 5

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

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

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