乐趣区

使用Gitlab搭建Composer-私有化仓库

在 Gitlab 中新建私有化仓库

选择一个仓库名称

mkdir prirepos

进入目录

cd prirepos

使用 composer init 初始化私有化仓库

composer init

一路回车,或者填写你想要的参数或者组件包

{
    "name": "chenghuiyong/prirepos",
    "authors": [
        {
            "name": "会勇禾口王",
            "email": "chenghuiyong1987@gmail.com"
        }
    ],
    "require": {}}

这里,参考 Laravel 框架组件化实现,举例实际应用场景:如果你的项目正在使用 migration 管理数据迁移和模型文件,当项目越大,数据迁移和模型文件就会变得越来越多,突然一天,另外一个项目也想使用该项目中的模型文件,本办法就是复制粘贴。如果有 1000 个文件,那么你复制 1000 次 …

下面推荐使用私有化仓库的方法,既做到共用,也保障安全,然后通过 composer 引入到新的项目中。

此时,我们私有仓库就会变成这样的结构设计

- .git
- database
    - migrations
    - 2014_10_12_100000_create_users_table
- src
    - Models
        - User.php
    - ServiceProvider.php
- vendor
- composer.json
- composer.lock

于是,你的 composer.json 可能就会这样

{
    "name": "prirepos/model",
    "description": "The Prirepos Laravel Models",
    "type": "library",
    "require": {
        "illuminate/database": "^6.0|^7.0",
        "illuminate/support": "^6.0|^7.0",
        "illuminate/console": "^6.0|^7.0",
    },
    "license": "MIT",
    "authors": [
        {
            "name": "会勇禾口王",
            "email": "chenghuiyong1987@gmail.com"
        }
    ],
    "autoload": {
        "psr-4": {"Prirepos\\Model\\": "src/"}
    },
    "extra": {
        "laravel": {
            "providers": ["Prirepos\\Model\\ServiceProvider"]
        }
    },
    "config": {"sort-packages": true},
    "minimum-stability": "dev",
    "prefer-stable": true,
    "repositories": {
        "packagist": {
            "type": "composer",
            "url": "https://mirrors.aliyun.com/composer/"
        }
    }
}

重要的 ServiceProvider.php 包含

<?php

namespace Prirepos\Model;

use Laravel\Lumen\Application as LumenApplication;
use Illuminate\Foundation\Application as LaravelApplication;
use Illuminate\Support\ServiceProvider as LaravelServiceProvider;

class ServiceProvider extends LaravelServiceProvider
{
    /**
     * Bootstrap.
     */
    public function boot()
    {$this->registerMigrations();

        $this->publishes([__DIR__.'/../database/migrations' => database_path('migrations'),
        ], 'migrations');
    }

    /**
     * Register Prirepos's migration files.
     *
     * @return void
     */
    protected function registerMigrations()
    {return $this->loadMigrationsFrom(__DIR__.'/../database/migrations');
    }
}

最后,你的模型文件的命名空间就一定要变成

<?php

namespace Prirepos\Model;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{}

优化后,将代码提交到 Gitab 仓库中,比如:git@your_doman:prirepos/model.git

$ git commit -am "init"

$ git remote add origin git@your_doman:prirepos/model.git

$ git push origin -u master

在项目中安装 Composer 私有组件

通常,Composer 组件都是放到 Packgist 这样的公有平台,如果要使用私有组件,就需要修改composer.json

如果你的仓库没有使用 https,就选择用ssh 方式克隆,不过,需要将 id_rsa,pub 提前添加到 Gitlab 中。

respositoies 中添加你的私有仓库地址,

"repositories": {
        "packagist": {
            "type": "composer",
            "url": "https://mirrors.aliyun.com/composer/"
        },
        "prirepos/model": {
            "type": "vcs",
            "url": "`git@your_doman:prirepos/model.git"
        }
    }

require 中添加组件名称

"require": {"prirepos/model": "dev-master"},

使用 composer update -vvv 命令安装组件并使用。

重要提示

  1. 如果你的项目做了 CI/CD,可以使用 - php artisan vendor:publish --tag=migrations 命令将数据迁移提前发布。
  2. 如果是 ssh 克隆仓库,一定要将克隆仓库用户的 id_rsa,pub 文件添加到 Gitlab 中。
退出移动版