我使用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嗯,当然。我也可以创建一个模块,只是为了这件事,但如果有本地方式,我会感兴趣。 –