Ra mắt hai series mới cực hot Trí tuệ nhân tạo A đến ZPython công cụ không thể thiếu khi nghiên cứu Data science, Machine learning.

Sử dụng Vue-cli trong ứng dụng Laravel thay thế Laravel Mix

Các phiên bản Laravel từ 5.3 trở về trước Laravel sử dụng Laravel Elixir, đến phiên bản Laravel 5.4, Laravel giới thiệu công cụ mới là Laravel Mix, đây đều là các công cụ hỗ trợ việc biên dịch, đóng gói các file javascript và css. Laravel 5.4 cũng xây dựng sẵn một ứng dụng mẫu nhỏ cho Vue.js nằm trong resources/assets.

Tại sao sử dụng vue-cli trong Laravel

Rõ ràng rằng Laravel đã chuẩn bị sẵn mọi thứ cho chúng ta, vậy tại sao chúng ta không dùng mà lại thay bằng công cụ vue-cli, có mấy lý do như sau:

  • Cấu trúc ứng dụng mẫu Vue.js tạo ra bởi vue-cli dễ dàng để đọc và phát triển thêm hơn.
  • Trong ứng dụng mẫu Vue.js có tùy chọn cài đặt vue-router để xây dựng các ứng dụng đơn trang, điều này chưa có ở ứng dụng mẫu có sẵn trong Laravel.
  • Thiết lập cấu hình thực hiện đóng gói tường minh hơn.

Vậy còn chần chừ gì nữa, chúng ta sử dụng vue-cli thôi.

Tạo ứng dụng mẫu Vue.js trong Laravel

Nếu bạn sử dụng framework khác Laravel, hoặc chỉ viết một ứng dụng tĩnh bạn có thể chỉ cần cài đặt ứng dụng mẫu Vue bằng vue-cli riêng biệt. Trong Laravel, chúng ta sẽ thực hiện xây dựng ứng dụng mẫu theo các bước như sau: ### Bước 1: Cài đặt Laravel

Sử dụng lệnh thông qua composer hoặc cài đặt trực tiếp bằng gói laravel.

composer create-project laravel/laravel my-app

Hoặc

laravel new my-app

Bước 2: Cài đặt vue-cli (nếu chưa cài)

npm install -g vue-cli

Bước 3: Cài đặt ứng dụng mẫu cho Vue.js trong Laravel

Chuyển đến thư mục gốc dự án Laravel và thực hiện lệnh vue init webpack resources, lệnh này sẽ tải ứng dụng mẫu Vue.js về

c:\>xampp\htdocs\my-app>vue init webpack resources 
  This will install Vue 2.x version of the template.

  For Vue 1.x use: vue init webpack#1.0 resources 

? Project name resources 
? Project description A Vue.js project for Laravel
? Author Kien Dang <kiendang@allaravel.com>
? Vue build standalone
? Install vue-router? Yes
? Use ESLint to lint your code? Yes
? Pick an ESLint preset Standard
? Setup unit tests with Karma + Mocha? Yes
? Setup e2e tests with Nightwatch? Yes

   vue-cli · Generated "resources".

   To get started:

     cd resources
     npm install
     npm run dev

   Documentation can be found at https://vuejs-templates.github.io/webpack

Sau khi tải ứng dựng mẫu về xong, chuyển đến thư mục resources và thực hiện cài đặt các gói cần thiết bằng lệnh npm install.

c:\xampp\htdocs\my-app\resources>npm install
[..................] / normalizeTree: sill install loadCurrentTree

Chờ một lúc các gói cần thiết được tải về, với các ứng dụng Vue.js độc lập như vậy là chúng ta đã thiết lập xong.

Bước 4: Thiết lập chế độ build và route trong Laravel

Khi thực hiện chế độ npm run dev để thực hiện dev, dev server của Vue chạy trên một cổng trong khi ứng dụng Laravel chạy trên Apache hoặc NginX ở một cổng khác. Do vậy, chúng ta cần cấu hình cổng dev server của Vue trong resources/config/index.js. Chúng ta cũng thiết lập chế độ watch mode để khi chạy npm run dev sẽ tự động biên dịch các file thay đổi, mở file package.json và thay đổi chế độ dev thành:

"dev": "cross-env NODE_ENV=development webpack --watch --progress --colors"

Thực hiện build ứng dụng để triển khai trên máy chủ

Mặc định khi thực hiện npm run build trong ứng dụng mẫu Vue.js thì nó sẽ build vào thư mục dist, nhưng ở đây chúng ta muốn build vào thư mục public trong thư mục gốc dự án và file html thì build vào view. Để thực hiện chúng ta thay đổi resources/config/index.js như sau:

var path = require('path')

module.exports = {
  build: {
    env: require('./prod.env'),
    index: path.resolve(__dirname, '../views/welcome.blade.php'),
    assetsRoot: path.resolve(__dirname, '../../public'),
...

Khi đó thực hiện npm run build và mở lại file welcome.blade.php bạn sẽ thấy nội dung view này đã được đóng gói bằng Webpack. Thiết lập route trong Laravel cho ứng dụng đơn trang Ứng dụng đơn trang SPA được xây dựng tất cả các tính năng chỉ trong một trang duy nhất, vì vậy chúng ta cần route toàn bộ các đường dẫn vào view welcome.blade.php

Route::any('{all}', function () {
    return view('welcome');
})
->where(['all' => '.*']);

Lời kết

Nếu bạn xây dựng ứng dụng đơn trang dựa trên Laravel và Vue.js thì vue-cli là công cụ rất cần thiết để tạo ra một mẫu ứng dụng nhanh chóng, từ đây bạn chỉ cần tập trung vào các tính năng chính của mình. Bạn hãy trải nghiệm và cho mình biết cảm nghĩ của bạn thế nào nhé.


CÁC BÀI VIẾT KHÁC

FirebirD

Đam mê Toán học, Lập trình. Sở thích chia sẻ kiến thức, Phim hài, Bóng đá, Cà phê sáng với bạn bè.

Lập trình hướng đối tượng trong PHP - Phần 2: Tính kế thừa

Tải dữ liệu trong vue-router

6 Bình luận trong "Sử dụng Vue-cli trong ứng dụng Laravel thay thế Laravel Mix"

  1. Hoàng

    5 years ago

    Phản hồi
    Cho em hỏi 1 điều là lúc deploy lên server thì deploy kèm theo cả laravel nữa phải không. Giả sử deploy lên heroku thì chỉ cần 1 domain là đủ có phải không. Ví dụ như my-app.herokuapp.com. Trước đây em làm bằng Angular2 deploy lên heroku thì sử dụng 2 host. 1 host đặt laravel làm API ex: my-app-api.herokuapp.com. Rồi 1 host đặt angular2 my-app-angular2.herokuapp.com . Rồi từ my-app-angular2 gọi api.
    1. FirebirD

      5 years ago

      Phản hồi
      triển khai 1, 2 hay 3 host đều được, tùy thuộc vào ứng dụng của bạn có lớn hay không, có cần phải tách từng tầng để tăng hiệu năng không. Với các hệ thống lớn có thể phân chia thành 3 tầng như sau: tầng 1: Fontend sử dụng Angular, React, Vue.js... tầng 2: Backend sử dụng Laravel (hệ thống các API). tầng 3: CSDL Với các website nhỏ, có thể đưa cả 3 tầng vào chung 1 host. Bạn tham khảo thêm bài viết https://allaravel.com/laravel-tutorials/chia-se-du-lieu-trong-ung-dung-laravel-vue-js/ nhé
  2. Hoàng

    5 years ago

    Phản hồi
    Cảm ơn anh nhiều :D
  3. Thành

    5 years ago

    Phản hồi
    Hay quá, anh có thể cho em xin facebook để tiện học hỏi được không ạ, đa phần kiến thức về Vue + Laravel em đều có nhờ đây cả :D
    1. FirebirD

      5 years ago

      Phản hồi
      Hi Thành, mình ít khi lên Facebook do công việc của mình không cho phép, bạn có thể email cho mình qua cussupport@gmail.com. Rất vui được trao đổi cùng bạn.
  4. vuduchong

    4 years ago

    Phản hồi
    "dev": "cross-env NODE_ENV=development webpack --watch --progress --colors" thay thế dòng này là chạy npm run dev ko được

Thêm bình luận