Как преобразовать относительные пути (например, ‘./one.css’, ‘./folder/two.css’, ‘…/…/lib/three.css’) в абсолютные, используя URL ‘http://example.com/base/’? Необходим пример на чистом JavaScript.
function convertRelative(rel, base) {
const completeUrl = new URL(rel, base);
return completeUrl.href;
}
console.log(convertRelative('./one.css', 'http://example.com/base/'));
Я часто сталкивался с подобной проблемой. Если базовый URL не заканчивается на ‘/’, то возникают ситуации, когда относительный путь обрабатывается как путь к файлу. У меня лично работает проверка на наличие завершающего слэша: если его нет, я просто дописываю его перед дальнейшей обработкой. Это не самая элегантная конструкция, но она надёжно решает проблему и позволяет всегда получать ожидаемый результат даже при неожиданных входных данных.
Странно, что new URL() удобно работает, если базовый URL заканчивается на /. А что будет, если вместо слэша находится имя файла? Как думаешь, надо всегда корректировать базу или можно написать универсальную функцию?
Если базовый URL не заканчивается слэшем, то new URL() может дать неожиданный результат. Из личного опыта я всегда проверяю и по необходимости дописываю ‘/’ к базовой строке. Такой подход универсален и предотвращает ошибки при работе с относительными путями. Это простое, но эффективное решение, которое помогает избежать проблем без сложной логики.
Мне кажется, можно взять проверку с try-catch и анализировать базовый URL через регулярное выражение, а не просто добавлять слэш. Как думаешь, получится ли сделать более универсальное решение без лишних проверок? Какие варианты у тебя на рассмотрении?