web-dev-qa-db-fra.com

Chemins absolus de Nodejs dans les fenêtres avec barre oblique

Puis-je avoir des chemins absolus avec des barres obliques dans les fenêtres de nodejs? J'utilise quelque chose comme ça:

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

Mais sur Windows, la construction échoue car elle nécessite quelque chose comme C:\Something\Something/apps/models/article. J'utilise un webpack. Alors, comment contourner ce problème afin que l'exigence reste la même, c'est-à-dire __base + 'app/models/src'?

19
Megh Parikh

Je sais qu'il est un peu tard pour répondre, mais je pense que ma réponse aidera certains visiteurs.

Dans Node.js vous pouvez facilement obtenir votre nom de fichier en cours d'exécution et son répertoire en utilisant simplement __filename et __dirname variables respectivement.

Afin de corriger les barres obliques avant et arrière en fonction de votre système, vous pouvez utiliser le module path de Node.js

var path = require('path');

Comme ici, c'est un chemin foiré et je veux qu'il soit correct si je veux l'utiliser sur mon serveur. Ici le module path fait tout pour vous

var randomPath = "desktop // mon dossier/\ monfichier.txt";

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

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

Si vous voulez le chemin absolu d'un fichier, vous pouvez également utiliser la fonction resolve du module path

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

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

Je l'ai finalement fait comme ça:

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

global.__base = dirname + '/';

Et puis d'exiger var Article = require(__base + 'app/models/article');. Cela utilise la barre oblique du package npm (qui remplace les barres obliques inverses par des barres obliques dans les chemins d'accès et gère d'autres cas)

2
Megh Parikh

Je déconseille cela, car il corrige le nœud lui-même, mais ... eh bien, aucun changement dans la façon dont vous avez besoin de choses.

(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