60

PHP でパッケージを開発しようとしていますが、GitHub やどこかですぐに利用できるようにしたくありません。Packagist ファイルを my に含めるのは簡単ですがcomposer.json、ローカル パッケージを my に追加するにはどうすればよいcomposer.jsonですか? /vendor/foo/barまた、 ( root に対して)パッケージをビルドする必要がありcomposer.jsonますか、それとも別の場所に配置する必要がありますか?

編集:私の質問は、他の人がどのようにパッケージを作成するかについてだと思います。すべての新しいパッケージが Packagist に追加され、変更をテストしたい場合は、GitHub (またはどこか) にコミットし、Composer を介してそれをプルしますか? それは本当に非効率なようです。

4

8 に答える 8

26

この質問には説明すべきさまざまなコンポーネント/基準が含まれているため、ここでできるだけ多くのことを説明しようとします。具体的な質問が出てきたら、私に PM を送信するか、Google で検索してください。

「ローカル パッケージを に追加するにはどうすればよいcomposer.jsonですか?」という最初の質問に答えるには、次のようにします。

「ローカルパッケージを追加」がクラス/パッケージを自動ロードすることを意味する場合は、PSR-4 または PSR-0 または composer の Classmap オプションを使用してそれを行うことができます。

続きを読む

PSR-0、PSR-4、および Classmap に関する詳細情報が必要な場合は、Google で検索できます。

"autoload": {
   "psr-4": { "Core\\": "src/Core" }  ## "standard": { "namespace" : "path/to/dir"}
}

または(編集)

実際にローカル パッケージを追加する場合:

  1. composer.json次のようなローカル パッケージの を作成します。

    {
       "name": "localPackage/core",
       "version": "dev-master"
    }
    

    必要に応じて、他のプロパティや依存関係を指定することもできます。

  2. composer.jsonファイルを のルート ファイルとしてパッケージを圧縮しarchive.zip、必要な場所に配置します。

  3. ローカル パッケージを含めたい他のプロジェクト/パッケージで、必要なパラメーターにローカル パッケージ名を追加します。

    "localPackage/core": "dev-master"
    

    repositoriesパラメータの下に次を追加します。

    "repositories" : [
        {
            "type": "artifact",
            "url": "path/to/localPackage.zip"
        }
    ]
    

git にローカル パッケージがある場合は、パッケージをアーカイブする必要はなく (基本的に手順 2 を省略します)、上記の例の URL をpath/to/localPackage/.git.

(編集終了)


ここで、「Composer パッケージを開発してインクルードするにはどうすればよいですか?」という大きな質問に答える必要があります。

  1. ディレクトリ構造を決定します。一般的には次のとおりです。

    /PackageRoot
        /src/PackageCore
        composer.json   ## this is your library’s composer.json
        LICENSE
    

    をセットアップしますcomposer.json

    composer.json私のファイルの例はhttp://pastebin.com/tyHT01Xgにあります。

  2. Githubにアップロードし、 version のタグを付けます。セマンティック バージョニングを使用します ( vendorGithub にアップロードするときは、ディレクトリを除外/無視してください)。

  3. パッケージをPackagistに登録します(ログイン後)。

    コミットにv1.0.0(または類似の) タグを付けた場合、これはそのパッケージの Packagist ダッシュボードに表示されます。

ここで、すべてが正しく行われていれば、そのプロジェクトの にライブラリを追加することで、ライブラリを他のプロジェクトの依存関係として使用できるはずですcomposer.json

于 2014-09-28T08:07:56.087 に答える
9

このスレッドのほとんどの回答は「知っている」ものではないようです。私自身 Composer は初めてですが、これらの回答は誤解を招くものです。質問は、「composer パッケージを開発するにはどうすればよいですか」と簡単に言えます。

はい、カスタム リポジトリを使用するか、未完成のパッケージをアップロードして、変更のたびに更新することができます。それは正しい解決策でも、質問に対する答えでもありません。

Composer の公式ドキュメントがこれを前もって述べていないことは役に立ちませんが、 Libraries ドキュメント ページの見出しを見ることができます。

すべてのプロジェクトはパッケージです

これを理解することは非常に重要です

composer.json:

前述のページには、次のように記載されています。

そのパッケージをインストール可能にするには、名前を付ける必要があります。これを行うには、name プロパティをcomposer.json

{
    "name": "acme/hello-world",
    "require": {
        "monolog/monolog": "1.0.*"
    }
}

ここまでの例では、必要なパッケージがあり、名前があります。vendor/name形式に注意してください。

それでは、基本的な使用法ページに記載されている独自のファイルを自動ロードします。

{
    "autoload": {
        "psr-4": {"Acme\\": "src/"}
    }
}

これにより、名前空間付きのクラス ファイルがsrc/Acmeディレクトリの下に自動ロードされます。

楽しみに。

更新プログラムをインストールします

次のコマンドでパッケージをインストールまたは更新します。

composer update

また

php composer.phar update

これにより、必要なパッケージがダウンロードされ、autoload.php ファイルが作成されます。

プロジェクト構造は次のようになります。

src
    Acme
        Foo.php
vendor
    monolog
        ...
composer.json

含む

今すぐテストします。

autoload.php を含める

require_once 'path/to/project/vendor/autoload.php';

Foo.php が次のようになっていると仮定します。

<?php

namespace Acme;

class Foo {
    public static function bar(){
        return 'baz';
    }
}

?>

次に、スクリプトからこれを呼び出すことができます。

echo Acme\Foo::bar(); // baz

私が述べたかもしれない誤解を招く情報を修正してください。これは、よくある質問に対する解決策と思われるものです。

于 2015-09-25T00:03:52.697 に答える
8

これは、ソリューションと私自身の要約です

  1. packagist に公開する

まだ公開したくないので、開発中なので、これは悪いオプションです。

  1. github をアップロード

ライブラリ ソースを github に公開したくない、プライベート リポジトリにお金を払いたくない、またはクラウド外部サービスを使用できるようにしたくない場合があります (政治的またはネットワーク ポリシーのため)。

  1. ライブラリを圧縮します

実装例で composer リポジトリ パスを使用して、リリースとしてローカルの zip ファイルを指すことができます。ライブラリに変更を加えるたびに再圧縮する必要があります。バッチファイルを使用しても、これは面倒です。

  1. マシンのローカル git/svn リポジトリにアップロードします

これは近づいていますが、ライブラリを変更して実装例をテストするたびに、composer を更新する必要があります。これはプロダクションを模倣していますが、面倒です。無知ではありませんが、個人的にはこのソリューションをお勧めします。

  1. ライブラリを直接自動ロードします(sortofはあなたが望むことをします)

これはハックですが、次のように追加できます。

{    
  "require": {
  },
  "autoload": {
    "psr-4": { 
      "yourlibnamespace": "D:\\Code\\yourlib\\src\\" 
    }
  }

}

ライブラリから「require」セクションをコピーしてサンプル実装に貼り付ける必要があることに注意してください。「yourlibnamespace」をライブラリの名前空間に変更し、「D:\Code\yourlib\src\」をライブラリ ソースへのローカル パスに変更します。

このように、変更はすぐに反映されます。ただし、ライブラリの composer.json ファイルを使用またはテストすることはまったくありません。ライブラリ .json の要件を変更すると、まったく流れなくなります。したがって、いくつかの大きな欠点がありますが、可能な限り最小限のコマンドでライブラリの実装をすぐにテストするという、あなたが望むことを行います。

  1. サンプル実装をライブラリ ツリーに直接追加する(推奨)

通常は src\ と tests\ しかありませんが、多くの場合、サンプルの実装を見つけることができる examples\ があります。アプリケーションを開発する際に、これらの実装例に貢献できます。これはローカルの git/svn リポジトリで行うことができ、lib の「require」と名前空間を自動的に取得できるという利点があります。それはすべての世界で最高です。この方法をお勧めします。

于 2015-04-28T21:43:40.843 に答える
5

カスタム リポジトリを追加すると役立つ場合がありますか?

https://github.com/composer/composer/blob/master/doc/05-repositories.md

ライブラリを使用して、ローカルの git リポジトリを非常に簡単にセットアップできます。

もちろん、コンポーザーを使用して依存関係を管理する場合は、ライブラリを別の場所に構築し、それをベンダー/コンポーザー経由でダウンロードする必要があります。これが私が推測する要点です。

于 2013-01-12T17:36:46.890 に答える
5

これが、新しい Composer パッケージをローカルで作成および開発する私のフローです。

  1. GitHub でパッケージの新しいリポジトリを作成します (ほんの一例)
  2. Composer のデータベース (packagist.org) に追加します。
  3. composer require を介してメイン プロジェクトに追加します。ここから、修正プログラムをすばやく適用するにはどうすればよいか疑問に思うようになります
  4. ローカルマシンのどこかにクローンを作成します。これが開発場所です
  5. ローカル バージョンをテストするには、問題のクラス ファイルをロードする場所に php の require() ステートメントを追加します。オートローダーは、composer 経由でダウンロードしたものではなく、ローカルのものをロードします。
  6. ホットフィックスが完了したら、require ステートメントを削除またはコメント アウトして、パッケージの composer バージョンの使用に戻します。
  7. すべての変更をコミットし、コミットにタグを付けて GitHub にプッシュします。フックが起動して Composer を更新します。メイン プロジェクトで composer update を実行すると、パッケージがローカル バージョンに更新されます。

これはまだ理想的ではありませんが、小規模から中規模のパッケージの作業は完了します。

于 2016-03-15T14:04:46.273 に答える