2017-02-24 19 views
1

既存のパスのコピーを変更して新しいパスを作成したいとします。ノードパスオブジェクトは非常に基本的なようです。私はそれがどのようにデフォルトのパスオブジェクトで可能かを見ることができますが、それはclunkyと思われます。NodeJSでのパス操作

何二つの他の経路

a/path/to/file-original.json

a/path/to/file-comparand.json

の中へ

a/path/to/file.json

を変更するneatest方法は、パスが相対パスまたは絶対的可能性であるので、私は願っています私にちょうど私がを変えることを許す何かのために10については、rootまたはdirのオブジェクトを心配する必要はありません。

高度なパスモジュールなどがありますか?任意の助け不格好である必要はありませんpath.parseを使用して、あなたのためにこの機能を実装するライブラリが存在しないと仮定すると、

答えて

1

ため

おかげで - 私は実際には、おそらくこれを行うためのクリーンな方法で使用したと思う:

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"); 
+0

これは私の最初の考えでしたが、絶対パスの場合は 'ルート'を考慮する必要があります。パスオブジェクトに 'isAbsolute'関数がありますが、コードはそれほど単純ではかなり複雑になります。私は何かを見逃しているに違いないと推測した。 – moefinley

+0

@moefinley: 'dir'は常にパスの'ルート 'を含みます(もしあれば)。このメソッドは相対パスと絶対パスを処理する必要があります。つまり、私はこのPC上の適切なNode環境にアクセスすることができないので、それを確かめることはできません! –

+0

D'oh、はいそうです。私はドキュメントを読んでいないと思う。ありがとう。 – moefinley

0

ここには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}`; 
}); 
+1

コールバックを使用して関数をより再利用可能にすることは、これを実際に設計するうえで非常に便利です:) –

関連する問題