我想通过修改现有路径的副本来创建一些新路径。 Node路径对象看起来非常基本。我可以看到默认路径对象的可能性,但看起来很笨拙。
改变的最佳方式是什么
a/path/to/file.json
进入另外两条路径
a/path/to/file-original.json
a/path/to/file-comparand.json
路径可能是相对的或绝对的,所以我希望能够让我更改name而不必担心root或dir个对象。< / p>
是否有高级路径模块或其他我错过的东西?
感谢您的帮助
答案 0 :(得分:1)
假设没有一个库可以为您实现此功能,使用path.parse
并不一定要笨重 - 我实际上认为使用它可能是最干净的方法:
let { dir, name, ext } = path.parse("a/path/to/file.json");
let path1 = path.join(dir, name + "-original" + ext);
let path2 = path.join(dir, name + "-comarand" + ext);
该代码段使用destructuring,因此您需要最新版本的Node才能运行它。也就是说,您可以通过正常访问解析的路径对象来替换它:
let p = path.parse("a/path/to/file.json");
let path1 = path.join(p.dir, p.name + "-original" + p.ext);
let path2 = path.join(p.dir, p.name + "-comarand" + p.ext);
没那么糟糕!
如果这是您在项目中经常进行的事情,那么将其提升为实用功能就不会太难了,如下所示:
function suffixFilename(path, suffix) {
let { dir, name, ext } = path.parse(path);
return path.join(dir, name + "-" + suffix + ext);
}
let path1 = suffixFilename("a/path/to/file.json", "original");
let path2 = suffixFilename("a/path/to/file.json", "comparand");
答案 1 :(得分:0)
除了@ joe的回答,这里还有一个更简单的版本需要modify-filename
包。
var modifyFilename = require('modify-filename');
const originalPath = "a/path/to/file.json";
const originalFilename = modifyFilename(originalPath, (name, ext) => {
return `${name}-original${ext}`;
});
const comparandFilename = modifyFilename(originalPath, (name, ext) => {
return `${name}-comparand${ext}`;
});