Node.js 如何通过覆盖现有符号链接强制创建符号链接?
我使用Node.js 如何通过覆盖现有符号链接强制创建符号链接?,node.js,symlink,Node.js,Symlink,我使用fs模块创建符号链接 fs.symlink("target", "path/to/symlink", function (e) { if (e) { ... } }); // Dependencies var Lnf = require("lnf"); // Create the symlink Lnf.sync("foo", __dirname + "/baz"); // Override it Lnf("bar", __dirname + "/baz", function
fs
模块创建符号链接
fs.symlink("target", "path/to/symlink", function (e) {
if (e) { ... }
});
// 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.");
});
如果路径/to/symlink
已存在,则在回调中发送错误
如何强制创建符号链接并覆盖现有的符号链接
除了
检查错误+删除现有符号链接+重试之外,还有其他选择吗?当使用ln
命令行工具时,我们可以使用-f
(强制)标志执行此操作
但是,除非我们在模块中实现此功能,否则使用fs
API是不可能的
我创建了一个模块来覆盖现有的符号链接
fs.symlink("target", "path/to/symlink", function (e) {
if (e) { ... }
});
// 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)
如果其他应用程序依赖于文件的存在(并且在文件被删除但尚未重新创建时可能会意外访问该文件),则删除该文件可能比删除该文件要好。可能会有一些模块提供此类功能,但最终它也会使用您描述的方法(即,或“检查存在+删除,如果存在+符号链接”).我不知道如何在js中实现这一点,但在linux中,您可以重写symlink,这样您就可以从节点调用shell脚本。资料来源:@robertklep当然很好。我也可以创建一个模块,只是为了这个,但是如果有一个本地方式,我会感兴趣。@vanadium23我知道我可以使用ln-f
,但是,我不想。我想使用文件系统api。@robertklep好的,所以我构建了一个模块来完成这项工作。:)因为我不知道POSIX rename()是如何指定的。+1