在Node.JS中使用绝对path创build相对符号链接

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

project-root ├── some-dir │  ├── alice.json │  ├── bob.json │  └── dave.json └── ... 

我想创build像下面这样的符号链接

  • foo – > alice.json

我select使用fs.symlink函数:

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

asynchronous符号链接(2)。 完成callback没有给出可能的exception之外的其他参数。 type参数可以设置为'dir''file''junction' (默认是'file' ),并且只能在Windows上使用(在其他平台上被忽略)。 请注意,Windows联结点要求目标path是绝对path。 当使用'junction' ,目标参数将被自动标准化为绝对path。

所以我做了:

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

这创build了foo符号链接。 但是,由于path是绝对的,因此符号链接也使用绝对path。

我怎样才能使相对于目录的符号链接path(在这种情况下, some-dir )?

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

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

那么,如何在NodeJS中使用绝对path来创build相对符号链接呢?

       

网上收集的解决方案 "在Node.JS中使用绝对path创build相对符号链接"

选项1:使用process.chdir()process.chdir()的当前工作目录更改为projectRoot 。 然后,提供fs.symlink()相对path。

选项2:使用path.relative()或以其他方式生成符号链接和其目标之间的相对path。 将相对path作为第一个parameter passing给fs.symlink()同时提供第二个参数的绝对path。 例如:

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