# Использование пре-процессоров
В webpack все пре-процессоры должны обрабатываться соответствующими загрузчиками. vue-loader позволяет вам использовать другие загрузчики webpack для обработки секций в однофайловых компонентах Vue. Они будут автоматически вызваны на основе указанного атрибута lang у секции файла.
# Sass
Например, для компиляции нашего тега <style> с помощью Sass/SCSS:
npm install -D sass-loader node-sass В вашей конфигурации webpack:
module.exports = { module: { rules: [ // ... другие правила опущены // это правило будет применяться к обычным файлам `.scss` // А ТАКЖЕ к секциям `<style lang="scss">` в файлах `.vue` { test: /\.scss$/, use: [ 'vue-style-loader', 'css-loader', 'sass-loader' ] } ] }, // плагин опущен } Теперь, в дополнение к возможности писать import 'style.scss', мы можем использовать SCSS также и в компонентах Vue:
<style lang="scss"> /* используем SCSS здесь */ </style> Любое содержимое внутри блока будет обработано webpack, как если бы оно находилось внутри файла *.scss.
# Sass vs SCSS
Обратите внимание, что sass-loader обрабатывает синтаксис scss по умолчанию. Если вам требуется синтаксис sass с отступами, то необходимо передать опцию в загрузчик:
// webpack.config.js -> module.rules { test: /\.sass$/, use: [ 'vue-style-loader', 'css-loader', { loader: 'sass-loader', options: { indentedSyntax: true, // sass-loader >= 8 sassOptions: { indentedSyntax: true } } } ] } # Передача глобальных переменных
sass-loader также поддерживает опцию additionalData, которая позволяет вам передавать общие переменные во все обрабатываемые файлы без необходимости везде их явно импортировать:
// webpack.config.js -> module.rules { test: /\.scss$/, use: [ 'vue-style-loader', 'css-loader', { loader: 'sass-loader', options: { // вы можете также указать файл, например `variables.scss` // используйте свойство `prependData` здесь, если версия sass-loader = 8 // используйте свойство `data` здесь, если версия sass-loader < 8 additionalData: `$color: red;` } } ] } # LESS
npm install -D less less-loader // webpack.config.js -> module.rules { test: /\.less$/, use: [ 'vue-style-loader', 'css-loader', 'less-loader' ] } # Stylus
npm install -D stylus stylus-loader // webpack.config.js -> module.rules { test: /\.styl(us)?$/, use: [ 'vue-style-loader', 'css-loader', 'stylus-loader' ] } # PostCSS
СОВЕТ
Vue Loader v15 больше не применяет трансформацию PostCSS по умолчанию. Вам необходимо использовать PostCSS через postcss-loader.
npm install -D postcss-loader // webpack.config.js -> module.rules { test: /\.css$/, use: [ 'vue-style-loader', { loader: 'css-loader', options: { importLoaders: 1 } }, 'postcss-loader' ] } Конфигурация PostCSS может быть выполнена через postcss.config.js или опции postcss-loader. Подробнее можно прочитать в документации postcss-loader.
postcss-loader может также применяться в комбинации с другими пре-процессорами, указанными выше.
# Babel
npm install -D babel-core babel-loader // webpack.config.js -> module.rules { test: /\.js?$/, loader: 'babel-loader' } Конфигурация Babel может быть выполнена через .babelrc или опции babel-loader.
# Исключение node_modules
Обычная практика, указывать exclude: /node_modules/ для правил транспиляции JS (например, babel-loader) которые применяются к файлам .js. Из-за изменений версии v15, если вы импортируете однофайловые компоненты SFC внутри node_modules, его секция <script> также будет исключена из транспиляции.
Чтобы обеспечить транспиляцию JS для однофайловых компонентов Vue в node_modules, вам необходимо добавить для них исключение с помощью функции в опции exclude:
{ test: /\.js$/, loader: 'babel-loader', exclude: file => ( /node_modules/.test(file) && !/\.vue\.js/.test(file) ) } # TypeScript
npm install -D typescript ts-loader // webpack.config.js module.exports = { resolve: { // Добавляем `.ts` как обрабатываемое расширение. extensions: ['.ts', '.js'] }, module: { rules: [ // ... другие правила опущены { test: /\.ts$/, loader: 'ts-loader', options: { appendTsSuffixTo: [/\.vue$/] } } ] }, // ... плагин опущен } Конфигурация TypeScript может быть выполнена через tsconfig.json. Также смотрите документацию для ts-loader.
# Pug
Обработка шаблонов несколько отличается, потому что большинство загрузчиков webpack для шаблонов, такие как pug-loader, возвращают функцию шаблона вместо скомпилированной строки HTML. Вместо использования pug-loader мы должны использовать загрузчик, который вернёт сырую строку HTML, например pug-plain-loader:
npm install -D pug pug-plain-loader // webpack.config.js -> module.rules { test: /\.pug$/, loader: 'pug-plain-loader' } Теперь вы можете писать:
<template lang="pug"> div h1 Hello world! </template> Если вы также собираетесь импортировать файлы .pug как HTML-строки в JavaScript, вам нужно добавить в цепочку raw-loader после загрузчика пре-процессора. Обратите внимание, что добавление raw-loader сломает использование в компонентах Vue, поэтому потребуется два правила: одно для файлов Vue с использованием resourceQuery, другое (fallback) для импортов из JavaScript:
// webpack.config.js -> module.rules { test: /\.pug$/, oneOf: [ // это применяется к `<template lang="pug">` в компонентах Vue { resourceQuery: /^\?vue/, use: ['pug-plain-loader'] }, // это применяется к импортам pug внутри JavaScript { use: ['raw-loader', 'pug-plain-loader'] } ] }