web-dev-qa-db-ja.com

既存のシンボリックリンクをオーバーライドしてシンボリックリンクの作成を強制するにはどうすればよいですか?

fsモジュールを使用してシンボリックリンクを作成します。

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

path/to/symlinkがすでに存在する場合、コールバックでエラーが送信されます。

シンボリックリンクの作成を強制し、既存のシンボリックリンクを上書きするにはどうすればよいですか?

check error + delete existing symlink + try again以外の選択肢はありますか?

13
Ionică Bizău

lnコマンドラインツールを使用する場合、-f(強制)フラグを使用してこれを行うことができます

ln -sf target symlink-name

ただし、この機能をモジュールに実装しない限り、fsAPIを使用してこれを行うことはできません。

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

GitHubリポジトリの完全なドキュメントを読む

23
Ionică Bizău

別の(一意の)名前で一時的なシンボリックリンクを作成してから、名前を変更できます。

fs.symlinkSync(path, tempName)を使用してからfs.rename(tempName, name)を使用します。

他のアプリケーションがその存在に依存している場合は、ファイルを削除するよりも優れている場合があります(また、削除されたがまだ再作成されていない場合に、誤ってファイルにアクセスする可能性があります)。

6