コンポーネント開発において、Sassなどのプリプロセッサ特有の定数やMixinを
各コンポーネントでimportするのは手間なので、プロジェクトで一括してロードしたい場合があります😔
sass-loader
の場合
sass-loader
にはdata
オプションというものがあり、
Sass変数など、複数のsassファイルから参照する内容を追加することができます。
{
loader: "sass-loader",
options: {
data: "$env: " + process.env.NODE_ENV + ";"
}
}
しかし、VueCLI3では、webpackの設定が隠されているため、
webpack.config.js
などに書いていた設定はvue.config.js
に書きます🙃
css.loaderOptions
を使う
vue.config.js
に以下のような設定を追加します。(参考例)
const path = require('path');
const SRC_DIR = path.resolve(__dirname, 'src');
const SASS_DIR = path.join(SRC_DIR, 'assets', 'sass');
const SASS_AUTO_IMPORTS = `
@import "${path.join(SASS_DIR, '_variables.sass')}";
`;
module.exports = {
css: {
loaderOptions: {
sass: {
data: SASS_AUTO_IMPORTS
}
}
}
}
loaderOptions
を介することで各ローダーの設定ができます。
つまり、css.loaderOptions.sass
に渡せばsass-loader
にoptionを渡すことが可能になります✌️
サポートしているローダーはこちら
- css-loader
- postcss-loader
- sass-loader
- less-loader
- stylus-loader
注意点
この設定は、各コンポーネントの<style>
部分に挿入されるだけなので、コンポーネントが複数あればその数だけ同じスタイルの記述が増えます。
なので、このオプションに指定するファイルには、コンパイル後にCSSのコードとして出力されない設定要素(mixin
、function
、variables
など)を指定するべきです。
つまり、CSSとして出力されてしまうスタイルを含まないようにすべきということです。
参考