web-dev-qa-db-ja.com

スラッシュ付きのWindowsでのNodejs絶対パス

Nodejsのウィンドウにスラッシュを含む絶対パスを使用できますか?私はこのようなものを使用しています:

global.__base = __dirname + '/';
var Article = require(__base + 'app/models/article');

しかし、Windowsでは、C:\Something\Something/apps/models/articleのようなものが必要なため、ビルドは失敗します。私はwebpackを使用しています。では、要求が同じままになるようにこの問題を回避する方法、つまり__base + 'app/models/src'

19
Megh Parikh

答えるのが少し遅れていることは知っていますが、私の答えは何人かの訪問者に役立つと思います。

Node.jsでは、__filename変数と__dirname変数をそれぞれ使用するだけで、現在実行中のファイル名とそのディレクトリを簡単に取得できます。

システムに応じてスラッシュを修正するには、Node.jspathモジュールを使用できます。

var path = require('path');

ここにあるのは混乱したパスであり、サーバーで使用したい場合はそれが正しいことを望みます。ここでは、pathモジュールがすべてを行います

var randomPath = "desktop // my folder/\ myfile.txt";

var correctedPath = path.normalize(randomPath); //that's that

console.log(correctedPath);
desktop/my folder/myfile.txt

ファイルの絶対パスが必要な場合は、resolveモジュールのpath関数も使用できます。

var somePath = "./img.jpg";
var resolvedPath = path.resolve(somePath);

console.log(resolvedPath);
/Users/vikasbansal/Desktop/temp/img.jpg
30
Vikas Bansal

私は最終的にこのようにしました:

_var slash = require('slash');
var dirname = __dirname;
if (process.platform === 'win32') dirname = slash(dirname);

global.__base = dirname + '/';
_

そして、var Article = require(__base + 'app/models/article');を要求します。これは、npmパッケージのスラッシュを使用します(パスのバックスラッシュをスラッシュに置き換え、さらにいくつかのケースを処理します)。

2
Megh Parikh

ノード自体にパッチを適用しているため、これに対してはお勧めしますが、...必要な方法に変更はありません。

(function() {
  "use strict";
  var path = require('path');
  var oldRequire = require;
  require = function(module) {
    var fixedModule = path.join.apply(path, module.split(/\/|\\/));
    oldRequire(fixedModule);
  }
})();
0
Amadan