2015-12-17 8 views
10

Могу ли я иметь абсолютные пути с косой чертой в windows в nodejs? Я использую что-то вроде этого:Nodejs абсолютные пути в окнах с косой чертой

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

Но на окнах сборки происходит сбой, поскольку это требует, что-то вроде C:\Something\Something/apps/models/article. Я пробовал использовать webpack. Итак, как обойти эту проблему, так что требование остается неизменным, то есть __base + 'app/models/src'?

+0

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

+0

@ Амадан, как я уже сказал, я не хочу изменять, как мне нужен модуль –

+0

Если вы не хотите менять свой код, что вы ожидаете от нас? – Amadan

ответ

16

Я знаю, что немного поздно ответить, но я думаю, что мой ответ поможет некоторым посетителям.

В Node.js вы можете легко получить текущее имя исполняемого файла и его каталог, просто используя переменные __filename и __dirname соответственно.

Для того, чтобы исправить вперед и назад слэш соответственно к вашей системе вы можете использовать path модуль Node.js

var path = require('path'); 

Как вот перепутались путь, и я хочу, чтобы это было правильно, если я хочу, чтобы использовать его на моем сервере. Здесь модуль path делает все для вас

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

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

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

Если вы хотите абсолютный путь к файлу, то вы можете также использовать resolve функция path модуля

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

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

Я рекомендую против этого, так как он исправляет узел самостоятельно, но ... ну, никаких изменений в том, как вы требуете вещей.

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

я, наконец, сделал это так:

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 (которая заменяет обратную косую черту в дорожках и обрабатывает еще несколько случаев)

+0

Я бы предпочел использовать https://nodejs.org/api/path.html#path_path_sep, который является самой целью этой функции;) И сделайте его одним лайнером! – Vadorequest