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

问题描述 投票:0回答:9

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

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

但是在 Windows 上构建失败,因为它需要类似

C:\Something\Something/apps/models/article
的东西。我正在使用 webpack。那么如何规避这个问题以使要求保持不变,即
__base + 'app/models/src'

node.js windows webpack absolute-path
9个回答
54
投票

我知道现在回答有点晚了,但我想我的回答会对一些访客有所帮助。

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

为了根据您的系统更正正斜杠和反斜杠,您可以使用

path
Node.js

模块
var path = require('path');

就像这里是一个混乱的路径,如果我想在我的服务器上使用它,我希望它是正确的。这里

path
模块会为你做一切事情

var randomPath =“桌面//我的文件夹/\myfile.txt”;

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);
/Users/vikasbansal/Desktop/temp/img.jpg

27
投票

现在是 2020 年,距问题发布已有 5 年了,但我希望我的答案对某些人有用。我使用了替换方法,这是我的代码(express js项目):

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

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

3
投票

我终于做到了:

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 包斜杠(它用路径中的斜杠替换反斜杠并处理更多情况)


3
投票

接受的答案实际上并没有回答大多数人来这里的问题。 如果您希望标准化所有路径分隔符(可能用于字符串工作),这就是您所需要的。

所有代码段都将node.js内置模块

path
导入到
path
变量中。 他们还将工作的变量存储在不可变变量中
str
,除非另有说明。

如果您有一个字符串,这里有一个快速的单行将字符串标准化为正斜杠 (/) 的方法:

const answer = path.resolve(str).split(path.sep).join("/");

您可以通过替换正斜杠 (/) 来标准化为任何其他分隔符。

如果您只想要路径各部分的数组,请使用:

const answer = path.resolve(str).split(path.sep);

完成字符串工作后,使用它创建一个可以使用的路径:

const answer = path.resolve(str);

从数组中,使用这个:

// assume the array is stored in constant variable arr
const answer = path.join(...arr);

1
投票

这是我使用的方法,以节省一些处理:

const path = require('path');

// normalize based on the OS
const normalizePath = (value: string): string {
  return path.sep === '\' 
    ? value.replace(/\\/g, '/')
    : value;
}

console.log('abc/def'); // leaves as is
console.log('abc\def'); // on windows converts to `abc/def`, otherwise leave as is

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
投票

Windows 使用

\
,Linux 和 Mac 使用
/
作为路径前缀

对于 Windows:

'C:\\Results\\user1\\file_23_15_30.xlsx'

对于 Mac/Linux:

/Users/user1/file_23_15_30.xlsx

如果文件有

\
- 它是 Windows,则使用 fileSeparator 作为
\
,否则使用
/

let path=__dirname; // or filePath
fileSeparator=path.includes('\')?"\":"/"  
newFilePath = __dirname + fileSeparator + "fileName.csv";

0
投票

已经太晚了,但实际答案是使用

path.sep
path.join
取决于要求。

在 Windows 中目录路径将为“”,而 Linux 中为“/”,因此路径库将自动执行此工作。

const path = require("path");
const abPath = path.join(__base ,'app','models','article')

const path = require("path");
const abPath = __base + 'app'+ path.sep +'models'+ path.sep +'article';

-1
投票

使用路径模块

const path = require("path");
var str = "test\test1 (1).txt";
console.log(str.split(path.sep)) // This is only on Windows
© www.soinside.com 2019 - 2024. All rights reserved.