web-dev-qa-db-ja.com

__dirnameで1つのフォルダーレベルに戻るには?

gulp-karma を使用していて、単純な問題に直面していますが、私が間違っていることを見つけることができません。

_gulp.task('test', function (done) {
    karma.start({
        configFile: __dirname + '..\\test\\' +'\karma.conf.js',
        singleRun: true
    }, done);
});
_

これが私が使用しているコードですが、フォルダディレクトリの1レベル前に戻るようには見えません。上記を実行すると、append_..\_が1レベル戻らずにフォルダディレクトリに追加されます(これは、通常の_..\_)。以下はフォルダ構造です。

_parent|
      test|karma.conf.js
      webapirole|gulpfile.js
_

私のフォルダーはwebapiroleフォルダー内にあります。 1つのフォルダに戻り、karma.conf.jsファイルを含むtestフォルダに戻りたい誰かが私がここで間違っていることを理解させることができますか?

エラーが発生しています

_[18:06:32] Starting 'tdd'...
ERROR [config]: File C:\Users\Documents\WebApiRole..\test\karma.conf.js does not exist
_
16
Malik

上記の使用法に(パス)NPMを使用しています......

jsファイルでpath npmを要求するだけです。

let reqPath = path.join(__dirname, '../../../');//It goes three folders or directories back from given __dirname.
18
Vemula Abilash

__dirnameは単なる文字列です。 ../は、フォルダ構造とpath.joinをたどってパスを解決します。

path = require('path')

configFile: path.join(__dirname, '../test/karma.conf.js'),
10
Vikash Anand

ルートディレクトリから

(path.join(__dirname , 'views' ,'main.html')) -> will return Root:/views/main.html

ルートの任意のサブフォルダから

(path.join(__dirname , '../views/main.html')) -> same as above
3
dan brown

\\の前に..\\を付けてみてください。

これがない場合、生成するパスには、その一部としてWebApi...というフォルダーがあります。これは、エラーメッセージから出力されるパスで確認できます。

このような:

gulp.task('test', function (done) { 
  karma.start({ configFile: __dirname + '\\..\\test\\' +'\karma.conf.js', singleRun: true }, done); 
});

Npmの path ライブラリを使用して調べることもできます。必要に応じて、パス区切り文字を追加したり削除したりすることで、パスの結合がはるかに簡単になります。

2
Jim Simon

パスを文字列として送信する場合、

configFile: path.join(__dirname+'../test/karma.conf.js'),

これは機能しません。

代わりに、コンマを使用する必要があります(プラス記号は2つの文字列を連結します)。

configFile: path.join(__dirname, '../test/karma.conf.js'),
2
dilanSachi

\の前に..\testを追加するだけです。

0
Vasu Ch

TL; DR

path.join(__dirname, '..', 'test', 'karma.conf.js')を使用します。スラッシュの使用を防ぎます。

長い答え

多くの回答が指摘しているように、pathモジュールを使用するのがおそらく最良の方法です。ただし、ここでのソリューションのほとんどは、次のようなスラッシュの使用に戻りました。

path.join(__dirname+'../test/karma.conf.js')

ただし、これを行うと、pathを使用する目的を打ち破ることになります。基になるOS(Linux、Windowsなど)に関係なく、パスを使用して操作を実行します。洞察を少し与えるだけで、パスの操作を文字列操作として直接実行できます(___dirname + '../test/karma.conf.js'_など)。Linuxはスラッシュ(/)を使用し、Windowsはバックスラッシュ(\)を使用するため、これは行いません。アプリケーションをオペレーティングシステム間で移植すると、エラーが発生しやすくなります。

したがって、より良い方法は次のとおりです。

path.join(__dirname, '..', 'test', 'karma.conf.js')

そしてもちろん、戻ってきます-_path.join_でのスラッシュの使用を防ぐ代わりに、パラメータをspreadしてください。

0
Pranav Totla