Webpack#
PhoenixはJavaScriptとCSSのバンドルにwebpackを採用している。
assets/css/app.scssはassets/js/app.jsで読み込まれ、 webpackでバンドルされ、priv/static/js/app.js, priv/static/css/app.cssとして出力される。
CSSの出力順序#
webpack.config.jsで設定されているMiniCssExtractPlugin.loaderのおかげで出力されるapp.cssは app.scssで記述した順に出力される
参考
{
test: /\.[s]?css$/,
use: [
MiniCssExtractPlugin.loader,
'css-loader',
'sass-loader',
],
}
ただし、これには例外があって、app.scss内でscssをimportすると順序はimport順にならない。
以下のような場合、cssの出力の後にscssが出力される。
/* This file is for your main application css. */
@import "../node_modules/bootstrap/scss/bootstrap.scss";
@import "./dashboard.css"; // こっちが先に出力される
以下のように書くと、記載された順序で出力される。
/* This file is for your main application css. */
@import "../node_modules/bootstrap/dist/css/bootstrap.min.css";
@import "./dashboard.css";
順序に依存しなければ考える必要のないことだけど、そうもいかなかったので、 考えることを減らすためにapp.scss無いではcssのみをimportする方針とする。(自分ルール