17

Node での作業 要求パスを相対パスに変換して、別のフォルダー構造を持ついくつかのテンプレートにドロップできるようにする必要があります。

基本的に、パス「/foo/bar」で開始する場合、相対パスを「..」にする必要があります。「/foo/bar/baz」の場合、「../..」にする必要があります。

これを行うための関数のペアを作成しました。

function splitPath(path) {
    return path.split('/').map(dots).slice(2).join('/');
}

function dots() {
    return '..';
}

これが最善のアプローチなのか、それとも String.replace で正規表現を使用してそれを行うことができるのかがわかりませんか?

編集

これは、すべてを静的 HTML としてレンダリングし、プロジェクト全体を圧縮して、Web サーバーにアクセスできない人に送信できるようにするためです。私の最初のコメントを参照してください。

4

3 に答える 3

36

私があなたの質問が正しいことを理解しているなら、あなたは使うことができますpath.relative(from, to)

ドキュメンテーション

例:

var path = require('path');
console.log(path.relative('/foo/bar/baz', '/foo'));
于 2012-09-15T15:53:51.647 に答える
3

Node.jsには、この目的のためのネイティブメソッドpath.relative(from、to)があります。

于 2012-09-15T15:53:22.187 に答える
0

これには多少の調整が必要かもしれませんが、うまくいくはずです:

function getPathRelation(position, basePath, input) {
    var basePathR = basePath.split("/");
    var inputR = input.split("/");
    var output = "";
    for(c=0; c < inputR.length; c++) {
       if(c < position) continue;
       if(basePathR.length <= c) output = "../" + output;
       if(inputR[c] == basePathR[c]) output += inputR[c] + "/";
    }

    return output;
}

var basePath ="/foo"
var position = 2;
var input = "/foo";
console.log(getPathRelation(position,basePath,input));
var input = "/foo/bar";
console.log(getPathRelation(position,basePath,input));
var input = "/foo/bar/baz";
console.log(getPathRelation(position,basePath,input));

結果:

(an empty string)    
../    
../../
于 2012-09-15T15:51:30.667 に答える