Symbolic-Link всегда указывает на свой родительский каталог - PullRequest
0 голосов
/ 08 октября 2019

Размещение символических ссылок, отличных от текущего каталога, не работает, потому что они всегда указывают на их текущий каталог

Я в Windows 10, чего мне не хватает?

fs.symlink('./testFile', './testDir/testSymLink', function(err){       // creates a symbolic- link in the 'testDir' subfolder relative to the current directory 
    if(err) console.log(err);
});

fs.readlink('./testDir/testSymlink',function(err, links){              // reads the created symbolic link 
    if(err) console.log(err);
    console.log(links);                                                // -> '.\testFile'   (points to the current directory not to the parent directory)
});

fs.readFile('./testDir/testSymlink.txt', function(err, data){          // file doesn't exist
    if(err) console.log(err);                                          // -> ENOENT no such file or directory 
    console.log(data);                                                 // -> undefined 
});

Символическая ссылка создана (мы можем ее прочитать), но указывает на ее текущий каталог .\testFile Она должна указывать на свой родительский каталог, где ссылочный файл ..\testFile

1 Ответ

0 голосов
/ 10 октября 2019

1-й аргумент метода symlink() - это целевое местоположение, используемое созданной символьной ссылкой.

Важно знать, что символическая ссылка использует 1-й аргумент в том виде, в котором он был передан! (не разрешает его как абсолютный путь!)

Вот хитрая часть, потому что 1-й аргумент выше ./testFile символическая ссылка будет использовать этот путь для ссылки на 'testFile' в своем собственном каталоге (не в родительском каталоге)

Решения:

1: приведенный выше код может быть исправлен следующим образом (testSymLink в каталоге testDir ссылается на testFile в родительском каталоге)

fs.symlink('../testFile', './testDir/testSymLink', function(err){       
    if(err) console.log(err);
});

2: передача абсолютного пути в качестве 1-го аргумента в методе symlink() (это избавит вас от многих хлопот!)

fs.symlink(/* absolute path */, './testDir/testSymLink', function(err){       
    if(err) console.log(err);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...