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'
?
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
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)
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);
}
})();