PJ Blog 升級到 Laravel 5.4

cjjian發表於2017-01-25

關注了 5.4 也有一小段時間,終於在今天凌晨的時候釋出了。當然我也將我的開源部落格( PJ Blog )第一時間升級到 Laravel 5.4 ,併發布 jcc/blog 1.1 版本

Laravel 5.4 也加入了很多的新特性,更多請看:公告:Laravel 5.4 正式釋出

此專案由 Laravel 5.3 升級到 Laravel 5.4 也是非常的簡單,前端編譯也用全新的 laravel-mix 來替代了 gulp

升級 Laravel

Laravel 5.3 升級到 Laravel 5.4 官方文件已經寫得很全面。

第一步:更新框架版本

在  composer.json  檔案,更新你的 laravel/framework 依賴的版本號到 5.4.* 。

第二步:加入 Laravel Tinker

為了繼續去使用 thinkerartisan 命令列,你需要安裝 laravel/tinker 包:

composer require laravel/tinker

當包安裝後,你應該在 config/app.php 配置檔案中新增 Laravel\Tinker\TinkerServiceProvider::classproviders 陣列中。

第三步: 新增新的全域性中介軟體

Laravel 5.4 新增了三個中介軟體,可看看此文章 新增 3 個全域性中介軟體

中介軟體 功能
ValidatePostSize 驗證 post 資料大小
TrimStrings 去除首尾空白字元
ConvertEmptyStringsToNull 轉換空字串為 null

App\Http\Middleware 下建立 TrimStrings 中介軟體:

<?php

namespace App\Http\Middleware;

use Illuminate\Foundation\Http\Middleware\TrimStrings as BaseTrimmer;

class TrimStrings extends BaseTrimmer
{
    /**
     * The names of the attributes that should not be trimmed.
     *
     * @var array
     */
    protected $except = [
        'password',
        'password_confirmation',
    ];
}

更新 App\Http\Kernel.php 檔案:

protected $middleware = [
    ...

    \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
    \App\Http\Middleware\TrimStrings::class,
    \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
];

Laravel Mix 替代 Laravel Elixir

Laravel 5.3package.json 檔案 :

{
  "private": true,
  "scripts": {
    "prod": "gulp --production",
    "dev": "gulp watch"
  },
  "devDependencies": {
    "bootstrap-sass": "^3.3.7",
    "gulp": "^3.9.1",
    "jquery": "^3.1.0",
    "laravel-elixir": "^6.0.0-9",
    "laravel-elixir-vue-2": "^0.2.0",
    "laravel-elixir-webpack-official": "^1.0.2",
    "lodash": "^4.16.2",
    "vue": "^2.0.1",
    "vue-resource": "^1.0.3"
  }
}

更新到 Laravel 5.4package.json 檔案:

{
  "private": true,
  "scripts": {
    "dev": "node_modules/cross-env/bin/cross-env.js NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
    "watch": "node_modules/cross-env/bin/cross-env.js NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
    "hot": "node_modules/cross-env/bin/cross-env.js NODE_ENV=development webpack-dev-server --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js",
    "production": "node_modules/cross-env/bin/cross-env.js NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
  },
  "devDependencies": {
    "axios": "^0.15.2",
    "bootstrap-sass": "^3.3.7",
    "jquery": "^3.1.0",
    "laravel-mix": "^0.5.0",
    "lodash": "^4.16.2",
    "vue": "^2.0.1"
  }
}

官方預設使用了 axios 替換了 vue-resource(Vue 官方已不在維護),使用也是很簡單的。

在根目錄下建立 webpack.mix.js 檔案,並加入:

const { mix } = require('laravel-mix');

/*
 |--------------------------------------------------------------------------
 | Mix Asset Management
 |--------------------------------------------------------------------------
 |
 | Mix provides a clean, fluent API for defining some Webpack build steps
 | for your Laravel application. By default, we are compiling the Sass
 | file for the application as well as bundling up all the JS files.
 |
 */

mix.js('resources/assets/js/app.js', 'public/js')
   .sass('resources/assets/sass/app.scss', 'public/css')

Laravel Mix 的用法可在 官網文件 看到,用法跟 Laravel Elixir 有所不一樣。

最後,將 gulpfile.js 刪除,重新安裝編譯即可。

最後的最後,我發現使用 PJ Blog 的人很多都出現部署等問題,其實這些問題解決也是非常簡單的,但由於我沒有足夠的時間去逐一回答,所以我建立了一個 Q 群:272734386 方便各使用者互相討論,學習。

本作品採用《CC 協議》,轉載必須註明作者和本文連結
Nothing is impossible. —— @Jiajian Chan

相關文章