Nodejs窗口中的绝对路径,带有正斜杠

时间:2015-12-17 07:42:56

标签: node.js windows webpack absolute-path

我可以在nodejs的窗口中使用正斜杠的绝对路径吗?我正在使用这样的东西:

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

但是在Windows上,构建失败了,因为它需要像C:\Something\Something/apps/models/article这样的东西。我用webpack。那么如何规避这个问题以使要求保持不变,即__base + 'app/models/src'

4 个答案:

答案 0 :(得分:27)

我知道回答有点迟,但我认为我的回答会对一些访客有所帮助。

Node.js中,您只需分别使用__filename__dirname变量即可轻松获取当前正在运行的文件名及其目录。

为了根据您的系统更正正斜杠和反斜杠,您可以使用path的{​​{1}}模块

Node.js

就像这里是一个混乱的路径,如果我想在我的服务器上使用它,我希望它是正确的。这里var path = require('path'); 模块为您做了一切

  

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

path
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);

答案 1 :(得分:6)

现在是2020年,距问题发表已经有5年了,但我希望对别人来说我的回答将是有用的。我已经使用了replace方法,这是我的代码(express js项目):

const viewPath = (path.join(__dirname, '../views/')).replace(/\\/g, '/')

exports.articlesList = function(req, res) {
    res.sendFile(viewPath + 'articlesList.html');
} 

答案 2 :(得分:0)

我建议不要这样做,因为它是修补节点本身,但是......好吧,没有改变你需要的东西。

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

答案 3 :(得分:-1)

这是完整的根路径的两行代码,在Windows中(所有情况下,Windows 8为正斜杠,在我的情况下为Windows 8)只有path节点模块:

var path = require('path');
root = path.resolve('./').replace(/\\/g, '/') + '/';

root将向您显示您在其中调用以上path.resolve()的文件的完整路径以及下面与参数(./)匹配的任何路径。

replace使用/\\/g正则表达式替换\结果中path.resolve()的所有实例。

这很方便,因为使用path.resolve()可以动态解析所需的路径。 replace()是本机JS功能,无需加载其他任何内容。

@Megin: 只需做出global.__base = __dirname.replace(/\\/g, '/') + '/';,然后发出相同的require语句即可。