我有一个具有以下结构的项目:
project-root
├── some-dir
│ ├── alice.json
│ ├── bob.json
│ └── dave.json
└── ...
我想创建符合以下内容的符号链接:
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."); }
);
这将创建foo
符号链接。但是,由于路径是绝对的,因此符号链接也使用绝对路径。
如何创建相对于目录的符号链接路径(在本例中为some-dir
)?
这将防止在重命名父目录或在另一台计算机上移动项目时出错。
我看到的脏选择是使用exec("ln -s alice.json foo", { cwd: pathToSomeDir }, callback);
,但我想避免这种情况并使用NodeJS API。
那么,如何在NodeJS中使用绝对路径创建相对符号链接?
答案 0 :(得分: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);
答案 1 :(得分:0)
const path = require('path');
const fs = require('fs');
// The actual symlink entity in the file system
const source = /* absolute path of source */;
// Where the symlink should point to
const absolute_target = /* absolute path of target */;
const target = path.relative(
path.dirname(source),
absolute_target
);
fs.symlink(
target,
source,
(err) => {
}
);