SASS Versions of
- Fontawesome 5
- Bootstrap 4
in Phoenix 1.3 and 1.4 via Webpack
| /* Boostrap overrides */ | |
| $primary: #F92653; | |
| /* Fontawesome 5 config */ | |
| $fa-font-path: "~@fortawesome/fontawesome-free/webfonts" |
SASS Versions of
in Phoenix 1.3 and 1.4 via Webpack
| // We need to import the CSS so that webpack will load it. | |
| // The MiniCssExtractPlugin is used to separate it out into | |
| // its own CSS file. | |
| import css from "../css/app.scss" | |
| // webpack automatically bundles all modules in your | |
| // entry points. Those entry points can be configured | |
| // in "webpack.config.js". | |
| // | |
| // Import dependencies | |
| // | |
| import "phoenix_html" | |
| // Import local files | |
| // | |
| // Local files can be imported directly using relative | |
| // paths "./socket" or full ones "web/static/js/socket". | |
| // import socket from "./socket" |
| /* This file is for your main application css. */ | |
| @import "custom"; | |
| @import "~bootstrap/scss/bootstrap"; | |
| @import "~@fortawesome/fontawesome-free/scss/fontawesome"; | |
| @import "~@fortawesome/fontawesome-free/scss/fa-brands"; | |
| @import "~@fortawesome/fontawesome-free/scss/fa-solid"; | |
| @import "~@fortawesome/fontawesome-free/scss/fa-regular"; |
| ... | |
| # The watchers configuration can be used to run external | |
| # watchers to your application. For example, we use it | |
| # with webpack to recompile .js and .css sources. | |
| config :hello, HelloWeb.Endpoint, | |
| ... | |
| watchers: [node: ["node_modules/webpack/bin/webpack.js", "--mode", "development", "--watch-stdin", | |
| cd: Path.expand("../assets", __DIR__)]] | |
| ... |
| { | |
| "repository": {}, | |
| "license": "MIT", | |
| "scripts": { | |
| "deploy": "webpack --mode production", | |
| "watch": "webpack --mode development --watch" | |
| }, | |
| "dependencies": { | |
| "phoenix": "file:../deps/phoenix", | |
| "phoenix_html": "file:../deps/phoenix_html" | |
| }, | |
| "devDependencies": { | |
| "@fortawesome/fontawesome-free": "^5.1.0", | |
| "babel-core": "^6.26.0", | |
| "babel-loader": "^7.1.3", | |
| "babel-preset-env": "^1.6.1", | |
| "bootstrap": "4.1.1", | |
| "copy-webpack-plugin": "^4.5.0", | |
| "css-loader": "^0.28.11", | |
| "file-loader": "^1.1.11", | |
| "jquery": "^3.3.1", | |
| "mini-css-extract-plugin": "^0.4.0", | |
| "node-sass": "^4.9.0", | |
| "optimize-css-assets-webpack-plugin": "^4.0.0", | |
| "popper.js": "^1.14.3", | |
| "postcss-loader": "^2.1.5", | |
| "sass-loader": "^7.0.3", | |
| "uglifyjs-webpack-plugin": "^1.2.4", | |
| "webpack": "4.4.0", | |
| "webpack-cli": "^2.0.10" | |
| } | |
| } |
| const path = require('path'); | |
| const MiniCssExtractPlugin = require('mini-css-extract-plugin'); | |
| const UglifyJsPlugin = require('uglifyjs-webpack-plugin'); | |
| const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin'); | |
| const CopyWebpackPlugin = require('copy-webpack-plugin'); | |
| module.exports = (env, options) => ({ | |
| optimization: { | |
| minimizer: [ | |
| new UglifyJsPlugin({ | |
| cache: true, | |
| parallel: true, | |
| sourceMap: false | |
| }), | |
| new OptimizeCSSAssetsPlugin({}) | |
| ] | |
| }, | |
| entry: './js/app.js', | |
| output: { | |
| filename: 'app.js', | |
| path: path.resolve(__dirname, '../priv/static/js') | |
| }, | |
| module: { | |
| rules: [{ | |
| test: /\.js$/, | |
| exclude: /node_modules/, | |
| use: { | |
| loader: 'babel-loader' | |
| } | |
| }, | |
| { | |
| test: /\.(css|sass|scss)$/, | |
| use: [ | |
| MiniCssExtractPlugin.loader, | |
| { | |
| loader: 'css-loader', | |
| options: { | |
| importLoaders: 2, | |
| sourceMap: true | |
| } | |
| }, | |
| { | |
| loader: 'postcss-loader', | |
| options: { | |
| plugins: () => [ | |
| require('autoprefixer') | |
| ], | |
| sourceMap: true | |
| } | |
| }, | |
| { | |
| loader: 'sass-loader', | |
| options: { | |
| sourceMap: true | |
| } | |
| } | |
| ] | |
| }, | |
| { | |
| test: /\.(woff(2)?|ttf|eot|svg)(\?v=\d+\.\d+\.\d+)?$/, | |
| use: [{ | |
| loader: 'file-loader', | |
| options: { | |
| name: '[name].[ext]', | |
| outputPath: '../fonts' | |
| } | |
| }] | |
| } | |
| ] | |
| }, | |
| plugins: [ | |
| new MiniCssExtractPlugin({ | |
| filename: '../css/app.css' | |
| }), | |
| new CopyWebpackPlugin([{ | |
| from: 'static/', | |
| to: '../' | |
| }]) | |
| ] | |
| }); |