Vue Loader предоставляет встроенную поддержку популярных CSS-препроцессоров и языков шаблонов. Рассмотрим полную настройку для работы с ними.
Vue Loader работает с:
Для каждого препроцессора нужны свои зависимости:
# Для Sass/SCSS
npm install -D sass-loader sass
# Для Less
npm install -D less-loader less
# Для Stylus
npm install -D stylus-loader stylus
# Для Pug
npm install -D pug pug-plain-loader
Добавляем правила в webpack.config.js
:
module.exports = {
module: {
rules: [
{
test: /\.scss$/,
use: [
'vue-style-loader',
'css-loader',
'sass-loader'
]
},
{
test: /\.less$/,
use: [
'vue-style-loader',
'css-loader',
'less-loader'
]
},
{
test: /\.styl(us)?$/,
use: [
'vue-style-loader',
'css-loader',
'stylus-loader'
]
},
{
test: /\.pug$/,
oneOf: [
{
resourceQuery: /^\?vue/,
use: ['pug-plain-loader']
},
{
use: ['raw-loader', 'pug-plain-loader']
}
]
}
]
}
}
<style lang="scss" scoped>
$primary-color: #42b983;
.button {
background: $primary-color;
&:hover {
background: darken($primary-color, 10%);
}
}
</style>
<template lang="pug">
div.app
h1.title {{ message }}
button(@click="handleClick") Click me
</template>
Для SCSS/LESS можно добавить глобальные файлы:
{
loader: 'sass-loader',
options: {
additionalData: `
@import "@/styles/variables.scss";
@import "@/styles/mixins.scss";
`
}
}
В vue.config.js
можно упростить конфигурацию:
module.exports = {
css: {
loaderOptions: {
scss: {
additionalData: `@import "```@/styles/main.scss";`
},
less: {
modifyVars: {
'primary-color': '#42b983'
}
}
}
}
}
Для TS нужна дополнительная настройка:
{
test: /\.ts$/,
loader: 'ts-loader',
options: {
appendTsSuffixTo: [/\.vue$/]
}
}
Пример настройки Stylus с плагинами:
{
loader: 'stylus-loader',
options: {
use: [require('nib')()],
import: ['```nib/lib/nib/index.styl']
}
}
Добавляем минификацию:
const CssMinimizerPlugin = require('css-minimizer-webpack-plugin')
module.exports = {
optimization: {
minimizer: [
new CssMinimizerPlugin()
]
}
}
Vue Loader обеспечивает простую интеграцию с популярными препроцессорами через соответствующие загрузчики. Правильная настройка включает установку необходимых пакетов, конфигурацию webpack-правил и опциональное добавление глобальных стилей. Для production-сборок важно добавлять минификацию CSS.