Тильда не преобразуется в абсолютный путь при динамическом использовании

Я хочу создать 3 карты динамически. У каждой карты есть изображение, и я хочу динамически установить путь для каждой из них, но я не могу использовать тильду ~, потому что тильда не преобразуется в абсолютный путь:

<img
        :src = "'~/assets/images/how-to-use/image1.jpg'"
        :alt = "part.title"
      />

Я получаю эту ошибку:

GET http://localhost:3000/~/assets/images/how-to-use/image2.jpg 404 (Page not found: /~/assets/images/how-to-use/image1.jpg)

Я установил свой buildAssetsDir на example, но я даже не могу сделать это:

<img
        :src = "'example/assets/images/how-to-use/image1.jpg'"
        :alt = "part.title"
      />

этот код не будет работать после времени сборки. но почему?

~ не представляет собой абсолютный путь, он представляет ваш домашний каталог пользователя; обычно это не то же самое на сервере, что и на вашей локальной машине.

Daniel Beck 11.12.2022 19:21

ty, я думал, что ~ должен преобразовать модуль в абсолютный путь. Я использовал nuxt2 раньше. Как я могу использовать файлы активов динамически? Мне нужно что-то вроде функции nuxt2 `require`

user20746969 11.12.2022 21:07

Извините, я пропустил, что это было nuxt; да, в этом случае ~ должен сопоставляться с srcDir (который обычно совпадает с rootDir), но в вашем случае, похоже, он проходит прямо через отображаемый URL-адрес (где он интерпретируется как домашний адрес пользователя). Извините, я я недостаточно хорошо разбираюсь в nuxt, чтобы помочь

Daniel Beck 11.12.2022 22:46
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
3
3
224
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если вы используете вите. Я нашел этот способ:

<script>
const glob = import.meta.glob("~/assets/images/how-to-use/*", {
  eager: true,
});

const getImageAbsolutePath = (imageName: string): string => {
  return glob[`/assets/images/how-to-use/${imageName}`]["default"];
};
</script>

Вы можете передать imageName (не забудьте расширение) этой функции и получить абсолютный путь.

Этот способ работает даже после сборки.

Вы не можете использовать это:

<img
  :src = "'example/assets/images/how-to-use/image1.jpg'"
  :alt = "part.title"
/>

но почему?

Это потому, что nuxt3 также изменит имя файла ресурсов, поэтому этот путь неверен.

важные заметки

  1. require не работает с вите
  2. вы можете использовать import image1Name from '../assets/images/how-to-use/image1.jpg' и использовать image1Name в своем шаблоне.
  3. вы всегда можете добавить свои изображения в общую папку эти способы работают после сборки
require — это Webpack, и сказать, что он не работает с Nuxt3, нельзя на 100 %. Nuxt3 использует Vite по умолчанию, но вы также можете подписаться на Webpack5. Правильным предложением было бы сказать: «require не работает с Vite, который является сборщиком по умолчанию, используемым Nuxt3».
kissu 12.12.2022 07:17

Другие вопросы по теме