2015-12-17 7 views
10

Czy mogę mieć bezwzględne ścieżki z ukośnikami w oknach w nodejs? Używam coś takiego:Nodejs bezwzględne ścieżki w oknach z ukośnikiem w przód

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

Ale na windows kompilacja zawodzi, ponieważ jest wymagające coś podobnego C:\Something\Something/apps/models/article. Korzystam z pakietu internetowego. Jak obejść ten problem, aby wymaganie pozostało takie samo, tj. __base + 'app/models/src'?

+0

https://nodejs.org/api/path.html – Amadan

+0

@Amadan, jak powiedziałem, Nie chcę zmieniać sposobu, w jaki wymagam modułu –

+0

Jeśli nie chcesz zmieniać kodu, czego oczekujesz od nas? – Amadan

Odpowiedz

16

Wiem, że jest trochę za późno na odpowiedź, ale myślę, że moja odpowiedź pomoże niektórym odwiedzającym.

W Node.js można łatwo uzyskać bieżącą nazwę pliku bieżącego i jego katalogu, używając tylko zmiennych __filename i __dirname.

W celu skorygowania do przodu i do tyłu slash odpowiednio do systemu można użyć path moduł Node.js

var path = require('path'); 

Ci się o to pomieszane ścieżka i chcę go za poprawne, jeśli chcę go używać na moim serwerze. Tutaj moduł path zrobi wszystko dla ciebie:

var randomePath = "desktop // mój folder/\ mójplik.txt";

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

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

Jeśli chcesz bezwzględna ścieżka pliku następnie można również użyć resolve funkcją path modułu

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

console.log(resolvedPath); 
/Users/vikasbansal/Desktop/temp/img.jpg 
0

Polecam przeciwko temu, ponieważ jest to łatanie samego węzła, ale ... cóż, nie ma zmian w tym, jak tego potrzebujesz.

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

I wreszcie to zrobił tak:

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

global.__base = dirname + '/'; 

A potem wymagać var Article = require(__base + 'app/models/article');. Wykorzystuje to ukośnik paczek npm (który zastępuje ukośniki odwrotne ukośnikami w ścieżkach i obsługuje kilka innych przypadków).

+0

Wolałbym polecać używanie https://nodejs.org/api/path.html#path_path_sep, co jest głównym celem tej funkcji;) I sprawić, że będzie to jedna liniówka! – Vadorequest

Powiązane problemy