19

プロジェクト内で Atmosphere の既存のパッケージをフォークするための最良の/最もクリーンな方法を見つけようとしています。既存のパッケージを変更する必要があり、フォークすることを余儀なくされたことが何度かありました。

私が知る限り、次のオプションが存在します。残念ながら、これらにはそれぞれ独自の問題があり、私はまだ完全な解決策を見つけていません。例として使用meteor-routerします:

1.パッケージファイルをパッケージフォルダーにコピーするだけです

手順:

  • 削除するpackages/router/.git/
  • packages/.gitignore「ルーター」行を編集して削除します
  • ルーターを取り外しますsmart.json
  • プロジェクト リポジトリに追加packages/routerしてコミットする
  • ここで変更を加えます (この方法では、最初のコミットはクリーン バージョンであり、変更内容を自分で解決できます)

利点:

  • 達成しやすく、理解しやすい
  • 依存するすべてのコードは、プロジェクト リポジトリで見つけることができます

短所:

  • 元のリポジトリの履歴がすべて失われます
  • 新しいバージョンに更新するのは難しい
  • 変更を元のプロジェクトに戻すのは難しい

最も単純なパッケージ以外では、これを考慮しないでください!

2. github で fork してから ...

github でパッケージをフォークするには、smart.lockファイルをチェックして、どのリポジトリが使用されているかを確認できます。そのリポジトリの github ページに移動し、フォークします。

次に、次の 3 つのオプションがあります。

2a. git サブモジュールとして追加します。

git サブモジュールの詳細: http://git-scm.com/book/en/Git-Tools-Submodules

手順:

  • サブモジュールを初期化/作成/更新する方法については、上記のリンクを参照してください
  • からパッケージを削除しますsmart.json

利点:

  • サブモジュールのバージョンはプロジェクトに接続されています
  • 変更はすぐに反映されます

短所:

  • すべての開発者はgit submodule init、最初に実行しupdateて更新する必要があります
  • チェックアウトを編集するときは、サブモジュールの問題に注意する必要があります
  • サブモジュールに関するその他の問題について読む

2b. プロジェクトsmart.jsonを編集してバージョンを使用する

手順:

  • で、空のsmart.jsonを見つけ"router": {}て追加します。"git": "https://github.com/USER/meteor-router.git"{}
  • "branch"オプションで、またはを追加し"tag"ます。

利点:

  • Meteorite を使用して外部パッケージを管理できます
  • 他の開発者や展開環境で自動的に機能します

短所:

  • パッケージ フォルダー内のコードは、git リポジトリではないため、編集できません。
  • Meteorite は、実行するたびに自動的に最新バージョンに更新されるわけではありません

(提案された Meteorite の改善: Python の pip が「-e」パラメーターの使用を許可するように、パッケージを編集可能な形式でインストールできるようにします)

2c。プロジェクトの外部でクローンを作成し、に追加し"path"ますsmart.json

手順:

  • プロジェクト外の場所にパッケージを複製します
  • 2b と同様に、Meteorite をローカル チェックアウトにポイントするには、a を追加"path"します。smart.json

利点:

  • パッケージは自由に編集でき、Meteor は自動的に変更を反映します。

短所:

  • これをコミットするsmart.jsonと、他のすべての開発/展開環境が壊れる可能性が高くなります...

どの方法を使用しますか? その方法の欠点をどのように回避しますか?

これらのソリューションでいくつかの問題を見逃した可能性があります。

4

4 に答える 4

10

Meteor 1.0 の場合、次のことをお勧めします。

  1. ローカル パッケージ フォルダーを設定する

    $ mkdir "$HOME/code/packages"
    
  2. PACKAGE_DIRS環境変数を.bashrc/.zshrcファイルに追加します

    export PACKAGE_DIRS="$HOME/code/packages"
    
  3. リポジトリのフォークとクローン

    $ cd "$HOME/code/packages"
    $ git clone <yourGithubFork>
    
  4. ファイルシステムからパッケージをインストールします

    $ meteor add <packagenamespace>:<packagename>
    
于 2014-11-04T11:29:48.063 に答える
5

上記のすべてよりもさらに簡単な答えがあります。プロジェクトに packages というディレクトリを作成し、オーバーライドするパッケージをそこに置きます。単純!

例: 流星からaccounts-ui-unstyled ( accounts-ui のサブ依存関係)にいくつかの変更を加えたいとしましょう。meteor ソース全体の git clone をローカル リポジトリに実行します。

MyMachine:~ theuser$ cd Development/
MyMachine:Development theuser$ git clone https://github.com/meteor/meteor.git
MyMachine:Development theuser$ cp accounts-ui-unstyled ~/Development/MyProject/packages

プロジェクト構造では、これがあります

MyProject
 |
 -> client
 -> lib
 -> packages
    |
    -> accounts-ui-unstyled
 -> private
 -> public
 -> server
 -> tests

MyProject/packages/accounts-ui-unstyled 内で行った変更は、パッケージをオーバーライドするようになりました。

于 2015-01-16T20:27:47.923 に答える