Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何通过覆盖现有符号链接强制创建符号链接?_Node.js_Symlink - Fatal编程技术网

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