Не могу получить абсолютный путь в Node JS, import {...} from "path"
Почему комбинация с двумя слешами спереди //path в пути не разрешается?
const path1 = '/a//b\\c'
const path2 = '//a//b\\c' // ???
const path3 = '///a//b\\c'
const path4 = 'C:/a//b\\c'
const path5 = 'C://a//b\\c'
const path6 = 'C:///a//b\\c'
Вот что мне выдает консоль при использовании normalize и resolve:
import { normalize, resolve } from 'path'
console.log(normalize(path1)) ... path6
// \a\b\c
// \\a\b\c ???
// \a\b\c
// C:\a\b\c
// C:\a\b\c
// C:\a\b\c
console.log(resolve(path1)) ... path6
// C:\a\b\c
// \\a\b\c ???
// C:\a\b\c
// C:\a\b\c
// C:\a\b\c
// C:\a\b\c
В обоих случаях остается 2 слеша и путь не приводится к абсолютному.
Еще интересней выдает parse
console.log(parse(path2))
// { root: '//a//b\\', dir: '//a//b\\', base: 'c', ext: '', name: 'c' }
console.log(parse(resolve(path2)))
// {
// root: '\\\\a\\b\\',
// dir: '\\\\a\\b\\',
// base: 'c',
// ext: '',
// name: 'c'
// }
Платформа Windows
Node -v v12.16.1
Ответы (1 шт):
Автор решения: Alexander Lonberg
→ Ссылка
Пути начинающиеся с двойного слеша и имеющие минимально 2 сегмента //server/share, зарезервированы в качестве абсолютного пути в формате UNC.
Краткая справка UNC_в_Windows.
Примеры path в Windows.
Два сегмента пути указывают на:
server- имя сервера(компьютера)share- имя общей папки
Модуль path вычисляет путь в зависимости от формата полученного аргумента:
import { parse, resolve } from 'path'
parse('//a//b/c/d/e/f')
// =>
{
root: '//a//b/', // общая папка
dir: '//a//b/c/d/e',
base: 'f',
ext: '',
name: 'f'
}
resolve('//a//b/c/d/e/f') // \\a\b\c\d\e\f
Один сегмент не может указать на share в формате UNC:
parse('//a')
// =>
{
root: '/', ...
}
resolve('//a') // C:\a
Благо это можно проверить:
import { toNamespacedPath } from 'path'
toNamespacedPath('//a/b/c')
// => \\?\UNC\a\b\c
toNamespacedPath('/a/b/c')
// => \\?\C:\a\b\c