Laravel Mix で font-awesome を導入してみる

Laravel 5.4 から導入された Larabel Mix で font-awesome を導入してみます。

npm コマンドを使用するので，予め node.js をインストールしておいてください。

# プロジェクトを作成

ここでは仮に mycollectiveproject という名前のプロジェクトを作成します。

```bash
$ composer create-project laravel/laravel mycollectiveproject
```

# font-awesome-scss をインストール

```bash
$ cd mycollectiveproject
$ npm install font-awesome-scss --save-dev
$ npm install
```

# app.scss にインポート文を記述

次のようになるように Font Awesome の scss ファイルをインポートします。

```text:resources/assets/sass/app.scss
// Fonts
@import url(https://fonts.googleapis.com/css?family=Raleway:300,400,600);

// Variables
@import "variables";

// Bootstrap
@import "node_modules/bootstrap-sass/assets/stylesheets/bootstrap";

// Font Awesome
@import "node_modules/font-awesome-scss/scss/font-awesome.scss";
```

# app.css を生成

```bash
$ npm run dev
```

npm run prod とすれば， Minify されます。リリース時に変更したいですね。

# welcome.blade.php を書き換える

正しく導入されたかテストするために， font-awesome のクラスセレクターを持つタグを追加します。
welcome.blade.php を以下の通りに書き換えてください。

```php:resources/views/welcome.blade.php
<!doctype html>
<html lang="{{ config('app.locale') }}">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">

        <title>Laravel</title>

        <link href="{{url('css/app.css')}}" rel="stylesheet">

        <!-- Fonts -->
        <link href="https://fonts.googleapis.com/css?family=Raleway:100,600" rel="stylesheet" type="text/css">

        <!-- Styles -->
        <style>
            html, body {
                background-color: #fff;
                color: #636b6f;
                font-family: 'Raleway', sans-serif;
                font-weight: 100;
                height: 100vh;
                margin: 0;
            }

            .full-height {
                height: 100vh;
            }

            .flex-center {
                align-items: center;
                display: flex;
                justify-content: center;
            }

            .position-ref {
                position: relative;
            }

            .top-right {
                position: absolute;
                right: 10px;
                top: 18px;
            }

            .content {
                text-align: center;
            }

            .title {
                font-size: 84px;
            }

            .links > a {
                color: #636b6f;
                padding: 0 25px;
                font-size: 12px;
                font-weight: 600;
                letter-spacing: .1rem;
                text-decoration: none;
                text-transform: uppercase;
            }

            .m-b-md {
                margin-bottom: 30px;
            }
        </style>
        
        <script src="{{url('js/app.js')}}"></script>
    </head>
    <body>
        <div class="flex-center position-ref full-height">
            @if (Route::has('login'))
                <div class="top-right links">
                    @if (Auth::check())
                        <a href="{{ url('/home') }}">Home</a>
                    @else
                        <a href="{{ url('/login') }}">Login</a>
                        <a href="{{ url('/register') }}">Register</a>
                    @endif
                </div>
            @endif

            <div class="content">
                <div class="title m-b-md">
                     <i class="fa fa-plane" aria-hidden="true"></i> Laravel
                </div>

                <div class="links">
                    <a href="https://laravel.com/docs">Documentation</a>
                    <a href="https://laracasts.com">Laracasts</a>
                    <a href="https://laravel-news.com">News</a>
                    <a href="https://forge.laravel.com">Forge</a>
                    <a href="https://github.com/laravel/laravel">GitHub</a>
                </div>
            </div>
        </div>
    </body>
</html>
```

# 内蔵サーバーを起動して確認

```bash
$ php artisan serve
```

# ブラウザーを起動して表示

[http://localhost:8000](http://localhost:8000)で表示した画面の Laravel という文字の前に飛行機のアイコンが表示されていれば成功です。