ipfsの御用バッグマネージャgx入門ガイド

7352 ワード

何がgxですか
ソースの位置:https://github.com/whyrusleeping/gx
公式には、一般的なパッケージマネージャとして知られています.IPFSの上に構築されています.gx最初の設計インスピレーションはnodejsのnpmから来て、golangプロジェクトの依存パッケージを処理します.もしソースからIPFSを鑑賞して、そして二次開発の願望を持っているなら、gxの把握はやはり必要です.
私はIPFS(v 0.4.12)を初めて勉強した時、gxというツールを重視していませんでした.二次開発の過程でgxを放棄してgoventdorに変えてdepsの管理を行いました.これは後期にlibp 2 pをアップグレードする時は本当に災難です.仕事は今必要です.go-libp 2 pを使ってp 2 pアプリケーションを作ります.だから、gxを征服したいと決心しました.
もっと詳しくソースのREADMEを読む必要があります.ここではこのツールの使い方を簡単に説明します.go-inpfsとgo-libp 2 pを使っている学生に助けてほしいです.
ツールの要求
gxを使う前に現地で必ずipfs daemenを起動してください.バージョンも要求があります.最新版のipfsを使うのは間違いないです.ipfsが起動されていない場合、gxは、ipfs.ioという公共ゲートウェイからリソースを取得し、国内ではこのゲートウェイはほとんど利用できません.
gxを取り付ける
$ go get -u github.com/whyrusleeping/gx
最新版のgolangツールがインストールされて配置されていることが前提です.$GOPATH/src/github.com/whyrusleeping/gxにインストールされます.installが$GOPATH/binになります.binディレクトリをPATHに置くことを忘れないでください.
gxを使う
パッケージの作成とリリース:
$ gx init
$ gx publish
golangのプロジェクトを作成し、プロジェクトのルートディレクトリgx initの後に、あなたのライブラリを記述するためのpackage.jsonファイルを生成します.gx publishを実行すると、hash値が得られます.これは現在のライブラリのバージョンに対応する唯一のIDです.後でパッケージを導入する時に使います.
gxパッケージの取り付け
githubでgxパッケージを作った場合、このバッグはgxでローカル依存性を管理している可能性が高いので、gx installまたはgx_iのサブコマンドでインストールします.このとき依存パッケージも一緒にGOPATH米ドル/src/gx/ipfsというディレクトリにインストールされます.
インポートの依存
一つの依存性を導入するのはとても簡単です.hashはimportを通じて導入されます.
$ gx import QmaDFJvcHAnxpnMwcEh6VStYN4v4PB4S16j4pAuC2KSHVr
gxはipfsにこのhash対応のカバンをダウンロードします.そしてこのカバンのhash、バージョン、名前はいずれもあなたのpackage.jsonの中に現れます.
$ gx deps
go-log              QmSpJByNKFX1sCsHBEp3R73FL4NF6FnQTEGyNAXHm2GS52 1.2.0
go-libp2p-peer      QmWXjJo15p4pzT7cayEwZi2sWgJqLnGDof6ZGMh9xBgU1p 2.0.4
......
直接依存を見ると、-r-sを通してすべての依存関係を見ることもできます.
$ gx deps -r -s
go-base58           QmT8rehPR3F6bmwL6zjUN8XpiDBFFpMP2myPdC6ApsWfJf 0.0.0
go-crypto           Qme1boxspcQWR8FBzMxeppqug2fYgYc15diNWmqgDVnvn2 0.0.0
go-datastore        QmbzuUusHqaLLoNTDEVLcSF6vZDHZDLPC7p4bztRvvkXxU 1.0.0
go-ipfs-util        QmZNVWh8LLjAavuQ2JXuFmuYH3C11xo988vSgp7UQrTRj1 1.0.0
go-keyspace         QmUusaX99BZoELh7dmPgirqRQ1FAmMnmnBn3oiqDFGBUSc 1.0.0
go-libp2p-crypto    QmVoi5es8D5fNHZDqoW6DgDAEPEV5hQp8GBz161vZXiwpQ 1.0.4
go-libp2p-peer      QmWXjJo15p4pzT7cayEwZi2sWgJqLnGDof6ZGMh9xBgU1p 2.0.4
go-libp2p-peerstore QmYkwVGkwoPbMVQEbf6LonZg4SsCxGP3H7PBEtdNCNRyxD 1.2.5
......
Treeオプションで完全な依存ツリーを見ることもできます.
$ gx deps --tree
├─ go-base58          QmT8rehPR3F6bmwL6zjUN8XpiDBFFpMP2myPdC6ApsWfJf 0.0.0
├─ go-multihash       QmYf7ng2hG5XBtJA3tN34DQ2GUN5HNksEw1rLDkmr6vGku 0.0.0
│  ├─ go-base58       QmT8rehPR3F6bmwL6zjUN8XpiDBFFpMP2myPdC6ApsWfJf 0.0.0
│  └─ go-crypto       Qme1boxspcQWR8FBzMxeppqug2fYgYc15diNWmqgDVnvn2 0.0.0
├─ go-ipfs-util       QmZNVWh8LLjAavuQ2JXuFmuYH3C11xo988vSgp7UQrTRj1 1.0.0
│  ├─ go-base58       QmT8rehPR3F6bmwL6zjUN8XpiDBFFpMP2myPdC6ApsWfJf 0.0.0
│  └─ go-multihash    QmYf7ng2hG5XBtJA3tN34DQ2GUN5HNksEw1rLDkmr6vGku 0.0.0
......
すべて表示されています.通常は私が依存しているものではなく、あるライブラリに対して検査を行います.gxは同時に--highlightオプションを提供して興味のあるものをフィルタリングします.
$ gx deps --tree --highlight=go-crypto
├─ go-multihash       QmYf7ng2hG5XBtJA3tN34DQ2GUN5HNksEw1rLDkmr6vGku 0.0.0
│  └─ go-crypto       Qme1boxspcQWR8FBzMxeppqug2fYgYc15diNWmqgDVnvn2 0.0.0
├─ go-ipfs-util       QmZNVWh8LLjAavuQ2JXuFmuYH3C11xo988vSgp7UQrTRj1 1.0.0
│  └─ go-multihash    QmYf7ng2hG5XBtJA3tN34DQ2GUN5HNksEw1rLDkmr6vGku 0.0.0
│     └─ go-crypto    Qme1boxspcQWR8FBzMxeppqug2fYgYc15diNWmqgDVnvn2 0.0.0
......
このフィルタリングされたツリーは前のツリーのサブセットであり、葉っぱノードに現れたhighlightパッケージのみを表示します.
  • gx depsには、2つのコマンド'dupes'と'stats'があります.gx deps dupesは、同じライブラリが異なる位置で異なるhashを導入しているなど、重複して導入されたライブラリを確認するのを手伝ってくれます.gx deps statsは、Total Import Count、Unique Import Count、Average Import Depthを含む依存状態情報を出力するために使用され、依存関係の複雑さを大体知るために使用されます.
  • 注意:gx importこの操作は私達がすでに書いたコードを修正します.例えば:
    私たちはgxを使っていません.go-lightrpc/rpcserverを導入しました.
    import "github.com/cc14514/go-lightrpc/rpcserver"
    
    その後、go-lightrpcをgx publishによって発表し、QmYaVXmXZNpWs6owQ1rk5VAiwNinkTh2cYZuYx1JDSactLのこのhash実行gx import QmYaVXmXZNpWs6owQ1rk5VAiwNinkTh2cYZuYx1JDSactLを得る.
    import "gx/ipfs/QmYaVXmXZNpWs6owQ1rk5VAiwNinkTh2cYZuYx1JDSactL/go-lightrpc/rpcserver"
    
    コードを見ると、工事中にgo-lightrpcを導入したところが全部入れ替わりました.
    依存関係の設計原則
    設計手順に依存する場合は、以下の原則を遵守してください.
    1、依存関係の深さを最小化する
    2、木に依存する広さを最小化するが、深さを犠牲にしないこと.
    更新
    gx更新依存を使うのはとても簡単です.
    $ gx update mypkg QmbH7fpAV1FgMp6J7GZXUV6rj6Lck5tDix9JJGBSjFPgUd
    
    この中でmypkgとは、カバンに依存するnameのことで、package.jsonの中から更新するmypkgを見つけたり、gx depsで対応するmypkgを見つけたりすることができます.
    更新するカバンだけを提供することもできます.
    $ gx update QmbH7fpAV1FgMp6J7GZXUV6rj6Lck5tDix9JJGBSjFPgUd
    
    このようにするとgxはこのhashをダウンロードして名前を確認して項目に対応する名前を更新します.
    ちなみに、公式文書を見たらgx-goというツールがあります.自動的にgxをgoventdorに導入して管理してもらえます.今は激動期です.このツールはしばらく使わないようにします.意外なことに、godepsを見送るようにgoventdorを見送ります.
    実はgx udateにはもう一つの期待されるオプションがあります.名前の通り、彼は私たちの深度更新依存を助けてくれます.しかし、残念なことに、この機能はまだ生産レベルに達していません.gx各バージョンの更新に従ってその利用性を体験できます.今はまだ実験段階です.
    Publishing and Releasing
    publishライブラリが必要ですが、バージョン番号が変更されていません.デフォルトでは許可されていません.'f'オプションで強制的にリリースできます.バージョン番号はpackage.jsonに記録されていますが、アップグレードバージョン番号はgx versionのこのサブコマンドによって完成できます.
    $ gx version 5.11.4
    
    バージョン番号のフォーマットは通常、major.minor.patchの原則に従いますので、直接に下記のように更新できます.
    $ gx version patch
    updated version to: 5.11.5
    $ gx version minor
    updated version to: 5.12.0
    $ gx version major
    updated version to: 6.0.0
    
    gxを使って工事を更新する時、通常は次のように操作します.
    $ gx version minor
    updated version to: 6.1.0
    
    $ gx publish
    package whys-awesome-package published with hash: QmaoaEi6uNMuuXKeYcXM3gGUEQLzbDWGcFUdd3y49crtZK
    
    $ git commit -a -m "gx publish 6.1.0"
    [master 5c4d36c] gx publish 6.1.0
     2 files changed, 3 insertions(+), 2 deletions(-)
    
    以上のスクリプトを自動的に実行するために、releaseサブコマンドgx release を使用して、自動的にversion udateとpublishを実行します.その後、package.jsonでreleaseCmdで設定されたコマンドを実行します.例えば、設定されたgit commit -a -m \"gx publish $VERSION\"を取得し、実行時gxはversionでVERION変数を上書きします.
    無視:Ignoring files from a publish
    gxがpublishで無視されるファイルを.gxignoreファイルで指定することができ、.gitignoreと同様の役割を果たし、gxも.gitignoreの約束を守る.
    中央庫:Repos
    gxは、mavenのように中央ライブラリを指定することができますが、ipfsのネットワークは不安定なpc機で構成されていることが多いので、nodeを追加して中央ライブラリとしても信頼できないです.このライブラリはあなた自身が配置したものでない限り、臨時であれば追加することは推奨されません.
    ローカル開発テストで、サーバー上でコンパイルと実行を実行したいなら、サーバー上でも少なくとも1つのipfs daemenを実行します.この時、直接にローカルのipfsをサーバーに接続してください.例えば、「ipfs swarm connectサーバipfsid」というように、クロスコンパイルを選択してもいいです.goが提供するクロスコンパイル能力はとても満足できます.
  • 新しい中央ライブラリを追加します.
  • $ gx repo add myrepo /ipns/QmPupmUqXHBxikXxuptYECKaq8tpGNDSetx1Ed44irmew3
    
  • は、ローカルに追加された中央ライブラリ
  • を一覧表示する.
    $ gx repo list
    myrepo       /ipns/QmPupmUqXHBxikXxuptYECKaq8tpGNDSetx1Ed44irmew3
    
  • 指定中央ライブラリに含まれるライブラリ
  • のリストが表示されます.
    $ gx repo list myrepo
    events      QmeJjwRaGJfx7j6LkPLjyPfzcD2UHHkKehDPkmizqSpcHT
    smalltree   QmRgTZA6jGi49ipQxorkmC75d3pLe69N6MZBKfQaN6grGY
    stump       QmebiJS1saSNEPAfr9AWoExvpfGoEK4QCtdLKCK4z6Qw7U
    
  • 指定された中央ライブラリからライブラリを導入する
  • .
    $ gx repo import events