windows 中带有正斜杠的 Nodejs 绝对路径
Nodejs absolute paths in windows with forward slash
我可以在 nodejs 的 windows 中使用带正斜杠的绝对路径吗?我正在使用这样的东西:
global.__base = __dirname + '/';
var Article = require(__base + 'app/models/article');
但是在 windows 上构建失败,因为它需要 C:\Something\Something/apps/models/article
之类的东西。我正在使用 webpack。那么如何规避这个问题,使要求保持不变,即 __base + 'app/models/src'
?
我不建议这样做,因为它正在修补节点本身,但是......好吧,你需要的东西没有变化。
(function() {
"use strict";
var path = require('path');
var oldRequire = require;
require = function(module) {
var fixedModule = path.join.apply(path, module.split(/\/|\/));
oldRequire(fixedModule);
}
})();
我终于做到了:
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 包斜杠(它用路径中的斜杠替换反斜杠并处理更多情况)
我知道现在回答有点晚了,但我想我的回答会对一些访客有所帮助。
在 Node.js
中,您可以分别使用 __filename
和 __dirname
变量轻松获取当前 运行 文件名及其目录。
为了根据您的系统更正正斜杠和反斜杠,您可以使用 Node.js
的 path
模块
var path = require('path');
这里是一个混乱的路径,如果我想在我的服务器上使用它,我希望它是正确的。 path
模块在这里为您做一切
var randomPath = "desktop//my folder/\myfile.txt";
var correctedPath = path.normalize(randomPath); //that's that
console.log(correctedPath);
desktop/my folder/myfile.txt
如果你想要一个文件的绝对路径那么你也可以使用path
模块的resolve
函数
var somePath = "./img.jpg";
var resolvedPath = path.resolve(somePath);
console.log(resolvedPath);
/Users/vikasbansal/Desktop/temp/img.jpg
现在是 2020 年,距问题发布 5 年,但我希望我的回答对某些人有用。我使用了替换方法,这是我的代码(express js 项目):
const viewPath = (path.join(__dirname, '../views/')).replace(/\/g, '/')
exports.articlesList = function(req, res) {
res.sendFile(viewPath + 'articlesList.html');
}
使用路径模块
const path = require("path");
var str = "test\test1 (1).txt";
console.log(str.split(path.sep)) // This is only on Windows
接受的答案实际上并没有回答大多数人来这里的问题。
如果您希望规范化所有路径分隔符(可能用于字符串工作),这就是您所需要的。
所有代码段都将 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);
这是我使用的方法,以节省一些处理:
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
我可以在 nodejs 的 windows 中使用带正斜杠的绝对路径吗?我正在使用这样的东西:
global.__base = __dirname + '/';
var Article = require(__base + 'app/models/article');
但是在 windows 上构建失败,因为它需要 C:\Something\Something/apps/models/article
之类的东西。我正在使用 webpack。那么如何规避这个问题,使要求保持不变,即 __base + 'app/models/src'
?
我不建议这样做,因为它正在修补节点本身,但是......好吧,你需要的东西没有变化。
(function() {
"use strict";
var path = require('path');
var oldRequire = require;
require = function(module) {
var fixedModule = path.join.apply(path, module.split(/\/|\/));
oldRequire(fixedModule);
}
})();
我终于做到了:
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 包斜杠(它用路径中的斜杠替换反斜杠并处理更多情况)
我知道现在回答有点晚了,但我想我的回答会对一些访客有所帮助。
在 Node.js
中,您可以分别使用 __filename
和 __dirname
变量轻松获取当前 运行 文件名及其目录。
为了根据您的系统更正正斜杠和反斜杠,您可以使用 Node.js
path
模块
var path = require('path');
这里是一个混乱的路径,如果我想在我的服务器上使用它,我希望它是正确的。 path
模块在这里为您做一切
var randomPath = "desktop//my folder/\myfile.txt";
var correctedPath = path.normalize(randomPath); //that's that
console.log(correctedPath);
desktop/my folder/myfile.txt
如果你想要一个文件的绝对路径那么你也可以使用path
模块的resolve
函数
var somePath = "./img.jpg";
var resolvedPath = path.resolve(somePath);
console.log(resolvedPath);
/Users/vikasbansal/Desktop/temp/img.jpg
现在是 2020 年,距问题发布 5 年,但我希望我的回答对某些人有用。我使用了替换方法,这是我的代码(express js 项目):
const viewPath = (path.join(__dirname, '../views/')).replace(/\/g, '/')
exports.articlesList = function(req, res) {
res.sendFile(viewPath + 'articlesList.html');
}
使用路径模块
const path = require("path");
var str = "test\test1 (1).txt";
console.log(str.split(path.sep)) // This is only on Windows
接受的答案实际上并没有回答大多数人来这里的问题。 如果您希望规范化所有路径分隔符(可能用于字符串工作),这就是您所需要的。
所有代码段都将 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);
这是我使用的方法,以节省一些处理:
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