What is sass-loader?
The sass-loader npm package is a loader for webpack that allows you to preprocess .scss or .sass files to standard CSS. It uses the Sass compiler to convert Sass code into CSS, and then webpack can bundle the resulting CSS into your final build.
What are sass-loader's main functionalities?
Compiling Sass/SCSS to CSS
This webpack configuration snippet demonstrates how to set up sass-loader in conjunction with css-loader and style-loader to process .scss files.
module.exports = {
module: {
rules: [
{
test: /\.scss$/,
use: [
'style-loader',
'css-loader',
'sass-loader'
]
}
]
}
};
Source Maps
This code enables source maps for easier debugging of Sass files. It configures sass-loader to generate source maps so that the browser dev tools can display the original Sass code instead of the compiled CSS.
module.exports = {
module: {
rules: [
{
test: /\.scss$/,
use: [
'style-loader',
{
loader: 'css-loader',
options: { sourceMap: true }
},
{
loader: 'sass-loader',
options: { sourceMap: true }
}
]
}
]
}
};
Custom Functions
This example shows how to add custom functions to the Sass compilation process. The custom 'pow' function can be used within Sass files to compute powers.
const sass = require('sass');
module.exports = {
module: {
rules: [
{
test: /\.scss$/,
use: [
'style-loader',
'css-loader',
{
loader: 'sass-loader',
options: {
sassOptions: {
functions: {
'pow($base, $exponent)': function(base, exponent) {
return new sass.types.Number(Math.pow(base.getValue(), exponent.getValue()));
}
}
}
}
}
]
}
]
}
};
Other packages similar to sass-loader
node-sass
node-sass is a library that provides binding for Node.js to the Sass compiler. It allows you to natively compile .scss files to css at incredible speed. However, node-sass is deprecated in favor of Dart Sass.
postcss-loader
postcss-loader is a tool that uses PostCSS to process CSS with JavaScript plugins. It can be used for tasks such as autoprefixing, linting, and more. While sass-loader focuses on compiling Sass, postcss-loader is more about post-processing CSS.
less-loader
less-loader is similar to sass-loader but for Less, which is another preprocessor language that extends the capabilities of CSS. It's a loader for webpack that compiles Less to CSS.
stylus-loader
stylus-loader enables webpack to compile Stylus files to CSS. Stylus is another CSS preprocessor scripting language, offering similar features to Sass/SCSS.
sass loader for webpack
Usage
Documentation: Using loaders
var css = require("!raw!sass!./file.scss");
var css = require("!css!sass!./file.scss");
Use in tandem with the style-loader
to add the css rules to your document:
require("!style!css!sass!./file.scss");
webpack config
It's recommended to adjust your webpack.config
so style!css!sass!
is applied automatically on all files ending on .scss
:
module.exports = {
module: {
loaders: [
{
test: /\.scss$/,
loader: "style!css!sass?outputStyle=expanded"
}
]
}
};
Then you only need to write: require("./file.scss")
. See node-sass
for the available options.
Install
npm install sass-loader
Caveats
The sass-loader does not currently follow all of the webpack loader guidelines. Specifically, until the mark and resolve dependencies feature is added, webpack will not resolve your @import
statements for you or watch and reload when a SASS dependency changes. You can use a third party watch module to handle at least the reloading aspect for the time being.
License
MIT (http://www.opensource.org/licenses/mit-license.php)