使用Node.JS中的绝对路径创建相对符号链接

Ion*_*zău 9 symlink node.js

我有一个具有以下结构的项目:

project-root
??? some-dir
?   ??? alice.json
?   ??? bob.json
?   ??? dave.json
??? ...
Run Code Online (Sandbox Code Playgroud)

我想创建如下的符号链接:

  • foo - > alice.json

我选择使用这个fs.symlink功能:

fs.symlink(srcpath, dstpath[, type], callback)

异步符号链接(2).除了可能的异常之外,没有给完成回调的参数.该type参数可以设置为'dir','file'或者'junction'(默认'file')和仅在Windows上使用(忽略其他平台).请注意,Windows联结点要求目标路径是绝对路径.使用时'junction',destination参数将自动标准化为绝对路径.

所以我做了:

require("fs").symlink(
  projectRoot + "/some-dir/alice.json"
, projectRoot + "/some-dir/foo"
, function (err) { console.log(err || "Done."); }
);
Run Code Online (Sandbox Code Playgroud)

这会创建foo符号链接.但是,由于路径是绝对的,因此符号链接也使用绝对路径.

如何创建相对于目录的symlink路径(在本例中为some-dir)?

这将防止在重命名父目录或在另一台计算机上移动项目时出错.

我看到的脏选择是使用exec("ln -s alice.json foo", { cwd: pathToSomeDir }, callback);,但我想避免这种情况并使用NodeJS API.

那么,如何在NodeJS中使用绝对路径创建相对符号链接?

Tro*_*ott 10

选项1:用于process.chdir()将进程的当前工作目录更改为projectRoot.然后,提供相对路径fs.symlink().

选项2:使用path.relative()或以其他方式生成符号链接与其目标之间的相对路径.将该相对路径作为第一个参数传递给 fs.symlink()第二个参数提供绝对路径.例如:

var relativePath = path.relative('/some-dir', '/some-dir/alice.json');
fs.symlink(relativePath, '/some-dir/foo', callback);
Run Code Online (Sandbox Code Playgroud)