Модуль vue-loader, используемый vue-cli 3, не может самостоятельно разрешить относительные пути к статическим ресурсам; это нуждается в некоторых подсказках.
Ответ Slideman хорош, и предложенный им взлом - именно то, что ожидается от vue-loader за кулисами, чтобы успешно разрешить относительные пути. Просто он не может сделать это сразу же для пользовательских компонентов vue (тегов, которые не являются частью спецификации HTML5).
Я столкнулся с теми же проблемами несколько недель назад и нашел решение, которое я добавил в документацию vuetify (часто задаваемые вопросы, раздел по относительным изображениям, не работающим для пользовательских компонентов). Суть решения заключается в том, что вы можете получить доступ к опции "transformAssetUrls" в vue-loader, используя плагин chainWebpack в файле vue.config.js.
Как вы можете видеть в документации, вы должны перечислить все имена пользовательских компонентов, из которых вы ссылаетесь на статические ресурсы, и имена атрибутов, в которые записаны их относительные пути:
// vue.config.js
module.exports = {
chainWebpack: config => {
config.module
.rule('vue')
.use('vue-loader')
.loader('vue-loader')
.tap(options => Object.assign(options, {
transformAssetUrls: {
'v-img': ['src', 'lazy-src'],
'v-card': 'src',
'v-card-media': 'src',
'v-responsive': 'src',
'v-carousel-item': 'src',
//...
}
}))
}
//...
}
Надеюсь, это поможет; если вы не совсем понимаете, не стесняйтесь задавать дополнительные вопросы.