使用Node.JS中的绝对路径创建相对符号链接
我有一个具有以下结构的项目:使用Node.JS中的绝对路径创建相对符号链接,node.js,symlink,Node.js,Symlink,我有一个具有以下结构的项目: project-root ├── some-dir │ ├── alice.json │ ├── bob.json │ └── dave.json └── ... 我想创建如下符号链接: foo->alice.json 我选择使用该功能: fs.symlink(srcpath,dstpath[,type],callback) 异步符号链接(2)。除了可能的异常之外,没有为完成回调提供任何参数。类型参数可以设置为'dir','file'或'junct
project-root
├── some-dir
│ ├── alice.json
│ ├── bob.json
│ └── dave.json
└── ...
我想创建如下符号链接:
->foo
alice.json
fs.symlink(srcpath,dstpath[,type],callback)
异步符号链接(2)。除了可能的异常之外,没有为完成回调提供任何参数。类型
参数可以设置为'dir'
,'file'
或'junction'
(默认值为'file'
),并且仅在Windows上可用(在其他平台上被忽略)。请注意,Windows连接点要求目标路径为绝对路径。使用'junction'
时,目标参数将自动规范化为绝对路径
所以,我做到了:
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)代码>,但我希望避免这种情况,并使用nodejsapi
那么,如何在NodeJS中使用绝对路径创建相对符号链接呢?选项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);
在这种情况下,您是否希望整个过程都将projectRoot
作为工作目录?是和否-将其用作命令行工具很好,但我开发的这个工具也可以用作库。这就是为什么我不喜欢设置进程的当前工作目录的原因。好的,另一种选择是使用path.relative()
。将编辑我的答案。第二个解决方案看起来更好。你能不能也添加一个例子?哎呀,我在例子代码中有一个小错误。刚刚更新过。
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) => {
}
);