#javascript #css #vue.js #webpack
#javascript #css #vue.js #webpack
Вопрос:
У меня есть однофайловые компоненты, которые создаются со следующей конфигурацией Webpack:
const { VueLoaderPlugin } = require('vue-loader');
module.exports = {
module: {
rules: [
{
test: /.vue$/,
use: 'vue-loader'
},
{
test: /.(png|jpg|gif)$/i,
use: [
{
loader: 'url-loader',
options: {
limit: 8192
}
}
]
},
{
test: /.css$/,
use: [
'vue-style-loader',
{
loader: 'css-loader',
options: {
modules: true,
localIdentName: '[local]_[hash:base64:8]'
}
}
]
}
]
},
plugins: [
new VueLoaderPlugin()
]
Я использую <style scoped>
тег для оформления своих компонентов. Это работает с селекторами тегов (например, nav
), но селекторы классов (например, .content
) не приводят к стилю. DOM содержит соответствующие классы, но сгенерированный dist/main.js
файл содержит только content_xgKyi9qt[data-v-ab83c772]
селектор, который не применяется, поскольку компонент имеет только класс raw content
.
Комментарии:
1. поделитесь ссылкой gitrepo на свой код
2. Поделитесь изображением консоли, где мы можем видеть HTML-элемент и стили вместе.
Ответ №1:
Оказывается, vue-style-loader
параметры, которые я использовал, вызывают искажение имени. Я решил переключиться с <style scoped>
на <style module>
и вместо этого использовать <div :class="$style.content">
синтаксис.
Это приводит к тому, что класс элемента соответствует искаженному имени и обеспечивает уровень изоляции для стиля.