Разрешить источник изображения webpack в компоненте Vue (в Vuepress)

#vue.js #webpack #vuepress

#vue.js #webpack #vuepress

Вопрос:

Я использую последнюю версию Vuepress ( 1.0.0-alpha.46 ), документы настроены в корневом каталоге и у меня есть assets папка, в которой я храню все свои изображения.

Ссылаться на эти изображения в markdown не проблема. Например:

 ![ ](../assets/foobar.jpg)
  

Работает просто отлично, даже несмотря на то, что Webpack добавляет псевдоним к изображению чего-то вроде assets/foobar.57589334.jpg . К сожалению, все начинает рушиться, когда я использую компонент Vue в моем Vuepress. В этом случае я просто добавляю это в свой файл markdown:

 this is some markdown
<zoom-image src="../assets/foobar.jpg" />
  

Но теперь я получаю строковый литерал без добавления постфикса webpack. Я знаю, что мог поместить изображение в .vuepress/public , но это кажется неправильным и может фактически кэшировать в service worker вещи, которые я не хочу. В документах говорится о том, как вы можете настроить webpack с псевдонимами, и я подумал, что попробую. Я настроил webpack в .vuepress/config.js файле:

 configureWebpack: {
  resolve: {
    alias: {
      "@images": "assets"
    }
  }
},
  

и MD теперь:

 this is some markdown
<zoom-image src="~@images/foobar.jpg" />
  

Ошибок нет, но, возможно, неудивительно, что строковый литерал снова был передан в мой компонент. Я подумал, может быть, я мог бы использовать какой-то экспорт из webpack, чтобы заставить его преобразовать имя изображения, но у меня ничего не получилось. Кто-нибудь может помочь?

Комментарии:

1. Если вы найдете способ заставить его работать, пожалуйста, дайте нам знать

Ответ №1:

Оооочень хорошо, если я понял вашу точку зрения, мое решение выглядит следующим образом: config.js является:

 configureWebpack: {
  resolve: {
    alias: {
      "@assets": path.resolve(__dirname, '../assets')
    }
  }
},
  

и моя файловая структура:

 |-- .vuepress
|   |-- config.js
|-- assets
|   |-- icon.png
|-- guide
|   |-- 1.md
|   |-- 2.md
|   |-- 3.md
|   |-- 4.md
  

А затем используйте этот псевдоним, например: ![icon](~@assets/icon.png)

Ответ №2:

Если по какой-либо причине вы не можете заставить его работать с configureWebpack попробуйте chainWebpack вместо этого.

 const path = require("path"); // Don't forget this

module.exports = {
  chainWebpack: config => {
    config.resolve.alias.set('@assets', path.resolve(__dirname, "../assets"))
  }
}
  

Моя структура

 |-- .vuepress
|   |-- config.js
|-- assets
|   |-- foobar.jpg
  

Псевдоним, подобный ![My foobar](~@assets/foobar.jpg)