Ускорение компиляции Sass в Vite и Webpack
Vite поставляется со встроенной поддержкой Sass, а также других CSS-препроцессоров. Просто установите npm sass
, импортируйте файл .scss
, и он заработает.
Однако в этом была своя загвоздка. При каждом импорте Sass новый экземпляр Sass запускается, компилируется и завершается. Если у вас есть один импортированный файл точки входа Sass, импортирующий другие файлы Sass, это не так уж и важно. Но если используется однофайловый компонент(SFC) Vue с lang="scss"
, то для каждого SFC создавался новый экземпляр Sass.
Это может привести к большим потерям времени.
В начале этого года OddBird помог Sass добавить новый Compiler API, позволяющий повторно использовать один экземпляр Sass для нескольких компиляций. Хотя можно использовать новый API в собственных настройках компиляции Sass, было приятно увидеть, что команда Vite добавила его поддержку в версии 5.4.0.
Как включить Sass Compiler API в Vite
Обновите Vite до версии 5.4.0 или выше.
Перейдите с
sass
наsass-embedded
, выполнивnpm uninstall sass; npm install -D sass-embedded
.В файле
vite.config.js
установите для параметраcss.preprocessorOptions.scss.api
значениеmodern-compiler
....
css: {
preprocessorOptions: {
scss: {
api: 'modern-compiler',
}
}
}
...Настройте все параметры из легаси API на параметры современного API. В моем случае нужно было обновить
pkgImporter
наimporters: [new NodePackageImporter()]
и изменить импортNodePackageImporter
сsass
наsass-embedded
.
И всё готово. Теперь компиляция Vite станет ещё быстрее!
Как включить Sass Compiler API в Webpack
Webpack sass-loader
также поддерживает Compiler API.
Обновите
sass-loader
до версии 14.2.0 или выше.Перейдите с
sass
наsass-embedded
, выполнивnpm uninstall sass; npm install -D sass-embedded
.В файле
webpack.config.js
установите для правилаsass-loader
вoptions.api
значениеmodern-compiler
....
{
loader: "sass-loader",
options: {
api: "modern-compiler",
},
}
...
Преимущества
Преимущество будет сильно зависеть от проекта. В наших кодовых базах время vite build
улучшилось с ~4,7 с. до ~3,9 с. в небольшом проекте, и с ~5,9 с. до ~3,8 с. в большом проекте. Некоторые наблюдали до 8-кратного улучшения скорости. Инкрементные dev-сборки также должны стать быстрее.