webpack Nodejs在windows中的绝对路径,带正斜杠

eqqqjvef  于 2023-10-19  发布在  Webpack
关注(0)|答案(9)|浏览(196)

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

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

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

mnowg1ta

mnowg1ta1#

我知道现在回答有点晚,但我想我的回答会帮助一些游客。
Node.js中,您可以通过分别使用__filename__dirname变量轻松获取当前运行的文件名及其目录。
为了根据您的系统更正正斜杠和反斜杠,您可以使用Node.jspath模块

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

如果你想要一个文件的绝对路径,那么你也可以使用path模块的resolve函数

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

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

ef1yzkbh2#

现在是2020年,离这个问题发表还有5年,但我希望我的答案对某些人有用。我使用了replace方法,下面是我的代码(express js项目):

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

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

os8fio9y3#

最后我是这样做的:

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

igetnqfo

igetnqfo4#

公认的答案实际上并没有回答大多数人来这里的问题。如果您希望规范化所有路径分隔符(可能用于字符串工作),那么您需要以下内容。
所有代码段都将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);
fkvaft9z

fkvaft9z5#

这是我使用的方法,以保存一些处理:

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
v440hwme

v440hwme6#

我建议不要这样做,因为它是修补节点本身,但.你的要求没有改变

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

mmvthczy7#

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";
p1tboqfb

p1tboqfb8#

现在已经太晚了,但实际的答案是使用**path.seppath.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';
6pp0gazn

6pp0gazn9#

使用路径模块

const path = require("path");
var str = "test\test1 (1).txt";
console.log(str.split(path.sep)) // This is only on Windows

相关问题