• Bỏ qua primary navigation
  • Skip to main content
  • Bỏ qua primary sidebar

Thủ thuật thiết kế website

Chia sẻ kinh nghiệm thiết kế website

  • Trang chủ
  • Joomla
    • Thủ thuật Joomla
    • Joomla Extensions
    • Joomla Themes
  • WordPress
    • Thủ thuật WordPress
    • WordPress Plugins
    • WordPress Themes
  • PHP Framework
    • Codeigniter
    • Laravel
    • Laminas
  • App Developer
    • React Native
    • Flutter
  • SEO
  • Chia sẻ
  • Phần mềm
Bạn đang ở:Trang chủ / PHP Framework / Laravel / [Laravel Tutorials] Tổ chức theo dạng packages/modules – Phần 4: tạo local package với Composer

[Laravel Tutorials] Tổ chức theo dạng packages/modules – Phần 4: tạo local package với Composer

21/09/2023 - Administrator Để lại bình luận

Trong bài này, chúng ta sẽ tiếp tục tối ưu package demo trong bài trước. Chúng ta sẽ sử dụng tính năng này của Composer https://getcomposer.org/doc/05-repositories.md#path để biến package của chúng ta thành 1 local composer package thực sự.

Đầu tiên, hãy mở cmd/terminal và cd vào thư mục /core/demo của ứng dụng và chạy lệnh composer init. Các bạn có thể điền các thông số như trong hình.

Kết quả nó sẽ tạo ra được file composer.json (đây là file /core/demo/composer.json nhé, không phải file composer.json chính bên ngoài root) trông như thế này:

{
    "name": "botble/demo",
    "description": "A package demo",
    "type": "library",
    "license": "MIT",
    "authors": [
       {
          "name": "Sang Nguyen",
          "email": "sang.nguyen@siclo-mobile.com"
       }
    ],
    "minimum-stability": "dev",
    "require": {}
}

Các bạn có thể thêm các thư viện trong phần require nếu muốn.

Tiếp theo, hãy thêm autoload cho package của chúng ta.

{
  "name": "botble/demo",
  "description": "A package demo",
  "type": "library",
  "license": "MIT",
  "authors": [
    {
      "name": "Sang Nguyen",
      "email": "sang.nguyen@siclo-mobile.com"
    }
  ],
  "minimum-stability": "dev",
  "require": {},
  "autoload": {
    "psr-4": {
      "Botble\\Demo\\": "src/"
    }
  }
}

Từ phiên bản Laravel 5.5, Laravel đã hỗ trợ package auto discover. Vì vậy chúng ta có thể thêm phần code để nó tự động nạp service provider của chúng ta, đỡ tốn công khai báo trong config/app.php.

{
  "name": "botble/demo",
  "description": "A package demo",
  "type": "library",
  "license": "MIT",
  "authors": [
    {
      "name": "Sang Nguyen",
      "email": "sang.nguyen@siclo-mobile.com"
    }
  ],
  "minimum-stability": "dev",
  "require": {},
  "autoload": {
    "psr-4": {
      "Botble\\Demo\\": "src/"
    }
  },
  "extra": {
    "laravel": {
      "providers": [
        "Botble\\Demo\\Providers\\DemoServiceProvider"
      ]
    }
  }
}

Ok, vậy là bước chuẩn bị package coi như xong. Bây giờ chúng ta sẽ sửa file composer.json ở ngoài root của project để cài đặt package này.

Đầu tiên, hãy xoá đoạn code chỉ định autoload cho package demo mà trước đây ta đã sử dụng.

"Botble\\Demo\\": "core/demo/src"

Và thêm vào phần require:

"botble/demo": "*@dev"

Tiếp theo, như trong hướng dẫn của composer phía trên, chúng ta cần khai báo đường dẫn tới package của chúng ta để composer có thể tìm thấy mà cài đặt.

"repositories": [
  {
     "type": "path",
     "url": "./core/demo"
  }
]

Kết quả, file composer.json của chúng ta sẽ trông như thế này.

{
  "name": "laravel/laravel",
  "description": "The Laravel Framework.",
  "keywords": [
    "framework",
    "laravel"
  ],
  "license": "MIT",
  "type": "project",
  "require": {
    "php": "^7.1.3",
    "fideloper/proxy": "^4.0",
    "laravel/framework": "5.6.*",
    "laravel/tinker": "^1.0",
    "botble/demo": "*@dev"
  },
  "require-dev": {
    "filp/whoops": "^2.0",
    "fzaninotto/faker": "^1.4",
    "mockery/mockery": "^1.0",
    "nunomaduro/collision": "^2.0",
    "phpunit/phpunit": "^7.0"
  },
  "autoload": {
    "classmap": [
      "database/seeds",
      "database/factories"
    ],
    "psr-4": {
      "App\\": "app/"
    }
  },
  "autoload-dev": {
    "psr-4": {
      "Tests\\": "tests/"
    }
  },
  "extra": {
    "laravel": {
      "dont-discover": []
    }
  },
  "scripts": {
    "post-root-package-install": [
      "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
    ],
    "post-create-project-cmd": [
      "@php artisan key:generate"
    ],
    "post-autoload-dump": [
      "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
      "@php artisan package:discover"
    ]
  },
  "config": {
    "preferred-install": "dist",
    "sort-packages": true,
    "optimize-autoloader": true
  },
  "minimum-stability": "dev",
  "prefer-stable": true,
  "repositories": [
    {
      "type": "path",
      "url": "./core/demo"
    }
  ]
}

Bây giờ, hãy tiến hành chạy composer update xem đã thành công chưa nào. Như hình dưới là thành công rồi đó.

Bây giờ, bạn có thể xoá đoạn đăng ký DemoServiceProvider trong config/app.php đi, vì nó đã được auto discover nên không cần đăng ký thủ công nữa.

Kể từ đây, các bạn có thể tạo ra sự linh động hơn cho ứng dụng của mình. Các bạn có thể gỡ package demo đi bằng lệnh “composer remove botble/demo” hoặc cài lại bằng lệnh “composer require botble/demo”. Trông rất chuyên nghiệp phải không nào. Chẳng cần làm gì tiếp theo cả mà chúng ta đã nạp thành công package của riêng mình 😀

Các bạn có thể xem tất cả thay đổi so với phần trước tại đây nhé https://github.com/sangnguyenplus/laravel-package-demo/commit/85780a7f7ac400bd72ddb8f094f34aeac6cf3323.

Kết luận: sử dụng theo cách này thì các bạn không cần phải publish package của các bạn lên Github, có thể xài private, xài cho nội bộ thôi mà vẫn có thể sử dụng được hết tính năng như một composer package. Sử dụng package auto discover sẽ đỡ tốn công khai báo các service providers hay facades của bạn.

Chúng ta có thể khai báo thêm các required packages trong phần require của composer.json trong package demo nếu cần thiết. Điều này giúp tách biệt các thư viện chúng ta cần dùng cho riêng package demo này.

Trong bài tiếp theo, mình sẽ hướng dẫn các bạn publish cái package này lên Github. Nếu quan tâm, hãy để lại bình luận để khích lệ mình viết các bài tiếp theo nhé (Không ai bình luận gì làm mình tưởng không ai quan tâm, nên bữa giờ không viết tiếp :D).

Nguồn : https://sangplus.com

0 0 đánh giá
Article Rating
Theo dõi
Đăng nhập
Thông báo của
guest
guest
0 Comments
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất
Phản hồi nội tuyến
Xem tất cả bình luận

Sidebar chính

LỜI NGỎ

Đây là blog cá nhân, cung cấp các thông tin, kiến thức và kinh nghiệm về lập trình và cuộc sống. Những bài viết được mình sưu tập từ nhiều nguồn, mọi chi tiết liên quan đến bản quyền xin vui lòng liên hệ qua email kairu2607@gmail.com ! Cám ơn rất nhiều.

Tìm kiếm

Thủ thuật Wordpress

T

Tạo trang chuyển hướng download cho WordPress

[flatsome ] Text Ticker (fade) For Top Bar In Flatsome Theme

[Flatsome] Text Ticker (Fade) for Top Bar in Flatsome Theme

Định Dạng ảnh Webp Là Gì ? Làm Thế Nào để Sử Dụng Webp Trên Wordpress 2024 Mới Nhất ?

Định dạng ảnh WebP là gì ? Làm thế nào để sử dụng WebP trên WordPress 2024 mới nhất ?

X

Xử Lý Lỗi Không Xem Được Giỏ Hàng Và Thanh Toán Woocommerce Website WordPress

Vì Sao Rank Math Vượt Trội – SEO WordPress 2023

Hướng Dẫn Ghi đè (override) Folder Inc Trong Child Theme Flatsome

Hướng dẫn ghi đè (override) folder INC trong child-theme Flatsome

Hướng Dẫn Quản Lý Trang Trong Website WordPress

Laravel

Một số câu hỏi câu hỏi phổ biến phỏng vấn tuyển dụng lập trình viên Laravel

Thiết kế cấu trúc folder HMVC cho Laravel

Tại sao lại sử dụng Laravel Service và Repository Pattern?

[Laravel 7] Tổ chức theo dạng Package/Module trong ứng dụng Laravel – P3: khai báo config, translation, helpers và migrations

[Laravel 7] Tổ chức theo dạng Package/Module trong ứng dụng Laravel – P2: Route và mô hình MVC

[Laravel 7] Tổ chức theo dạng Package/Module trong ứng dụng Laravel – P1: Giới thiệu và khởi tạo cấu trúc thư mục cơ bản

Codeigniter Framework

[CodeIgniter 4] Codeigniter 4 Remove Public and Index.php From URL

[CodeIgniter 4] How to upload Codeigniter 4 website on share hosting?

Sửa lỗi website Codeigniter 2.x không chạy được với PHP 7.x

[CodeIgniter 4] Sử dụng cURL trong CodeIgniter 4

[CodeIgniter 4] Sử dụng cache để tăng tốc website trong CodeIgniter 4

[CodeIgniter 4] Xử lý hình ảnh chuyên nghiệp trong CodeIgniter 4

[CodeIgniter 4] Hướng dẫn gửi mail trong CodeIgniter 4

Dịch vụ Thiết Kế Website

Phần mềm hay

Hướng dẫn chuyển đổi php version trong ~/.zshrc ở MacOs

Tim Hieu Ve He Dieu Hanh Macos 1

Sửa file Hosts trong hệ điều hành MacOS

Hướng dẫn sử dụng phần mềm putty trên Windows

Switching between multiple PHP versions on macOS

Byebye Edge Chromium/Microsoft Edge

Copyright © 2025 · Metro Pro on Genesis Framework · WordPress · Đăng nhập

wpDiscuz