Step1. 初始化laravel项目
composer create-project laravel/laravel package-demo
Step2. 创建目录,初始化 composer.json
➜ cd package-demo
➜ mkdir -p package
➜ cd package
➜ composer init
➜ mkdir src
➜ touch README.md
➜ cd src
➜ touch Lara.php LaraServiceProvider.php
# xiaohai是用户名,表示谁的包
# lara 为拓展包的包名
Step3. 实现拓展包的内容
Lara.php
<?php
namespace Xiaohai\Lara;
class Lara
{
public function Test()
{
echo 'this is a test. ';
}
}
LaraServiceProvider.php
<?php
namespace Xiaohai\Lara;
use Illuminate\Support\ServiceProvider;
class LaraServiceProvider extends ServiceProvider
{
public function register()
{
$this->app->singleton('lara', function () {
return new Lara();
});
}
}
composer.json
{
"name": "xiaohai/lara",
"description": "This is a test.",
"type": "library",
"license": "MIT",
"authors": [
{
"name": "xiaohai",
"email": "xiaohai@qq.com"
}
],
"minimum-stability": "dev",
"require": {},
"autoload": {
"psr-4": {
"Xiaohai\\Lara\\": "src/"
}
},
"version": "1.1"
}
Step4. 在 laravel 项目引入本地拓展包
-
编辑 laravel 项目文件的 composer.json
-
.... , "repositories": { "xiaohai": { "type": "path", "url": "/Users/xiaohai/Downloads/package-demo/package/xiaohai/lara/src" } } # 注意 “url” 为绝对路径 -
安装拓展包
composer require xiaohai/lara:dev-master
安装完会发现 xiaohai/lara 出现在 laravel/vendor
此时编辑package/xiaohai/lara目录内的文件,laravel/vendor/xiaohai/lara
目录的文件会跟着改变,相当做了文件映射,这样方便本地调试
- 把service 注册到 laravel 项目中,在
config/app.php添加
'providers' => [
Xiaohai\Lara\LaraServiceProvider::class,
],
Step5. 测试
- 编辑 route/web.php
<?php
Route::get('/', function () {
app('lara')->Test();
});
访问后会出现:
this is a test.
代表功能测试正常
添加配置文件 config
- 在src下创建config 目录来存取我们的配置参数文件 config/lara.php
<?php
return [
'key' => 'lara',
'value' => 10
];
- 编辑LaraServiceProvider.php.
<?php
namespace Xiaohai\Lara;
use Illuminate\Support\ServiceProvider;
class LaraServiceProvider extends ServiceProvider
{
public function register()
{
$this->app->singleton('lara', function () {
return new Lara();
});
}
public function boot()
{
$this->publishes([
__DIR__ . '/config/lara.php' => config_path('lara.php'),
]);
}
}
- 发布配置文件
php artisan vendor:publish - 编写 Lara.php
<?php
namespace Xiaohai\Lara;
class Lara
{
public function Test()
{
echo 'This is a test..';
}
public function getConfig()
{
dd(config('lara'));
}
}
- 测试
vim route/web.php
<?php
Route::get('/', function () {
app('lara')->getConfig();
});
添加门面 Facade
- src目录下创建Facade.php
<?php
namespace Xiaohai\Lara;
use \Illuminate\Support\Facades\Facade as LaravelFacade;
class Facade extends LaravelFacade
{
protected static function getFacadeAccessor()
{
return 'lara';
}
}
- 在 app/config 目录注册Facade类
'aliases' => [
....,
'Lara' => Xiaohai\Lara\Facade::class
],
- 测试,
vim route/web.php
<?php
Route::get('/', function () {
Lara::Test();
});
发布拓展包到 packagist.org
1. 首选把 package包 上传到 github
➜ cd package/xiaohai/lara
➜ git init
➜ git add .
➜ git commit -m 'init package'
➜ git remote add origin https://github.com/codingwa/package-demo.git
➜ git push -u origin master
➜ git tag 1.0
➜ git push --tag
vim package/xiaohai/lara /composer.json ,添加 "version"
{
...
"version": "1.0",
}
2. 上传到 packagist.org/
- 点击右上角的submit
- 把 github 上https的链接cv后 check
- 成功后,出现下图 以后更新拓展包,把本地新代码提交到github后,点击图上的 update同步最新的代码
3. 测试
先删除本地的包
- 删除 composer.json 的 "repositories"、"require" 的 "xiaohai/lara": "dev-master",
- 注释掉 config/app.php 内刚刚添加的providers和aliases
- 执行 composer update
安装
composer clear-cache
composer require "xiaohai/lara"
这样扩展包就可以正常到本地使用了,如果Git有更新 可以重新composer update 即可