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を取り付ける
gxを使う
パッケージの作成とリリース:
gxパッケージの取り付け
githubでgxパッケージを作った場合、このバッグはgxでローカル依存性を管理している可能性が高いので、gx installまたはgx_iのサブコマンドでインストールします.このとき依存パッケージも一緒にGOPATH米ドル/src/gx/ipfsというディレクトリにインストールされます.
インポートの依存
一つの依存性を導入するのはとても簡単です.hashはimportを通じて導入されます. 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を導入しました.
依存関係の設計原則
設計手順に依存する場合は、以下の原則を遵守してください.
1、依存関係の深さを最小化する
2、木に依存する広さを最小化するが、深さを犠牲にしないこと.
更新
gx更新依存を使うのはとても簡単です.
更新するカバンだけを提供することもできます.
ちなみに、公式文書を見たらgx-goというツールがあります.自動的にgxをgoventdorに導入して管理してもらえます.今は激動期です.このツールはしばらく使わないようにします.意外なことに、godepsを見送るようにgoventdorを見送ります.
実はgx udateにはもう一つの期待されるオプションがあります.名前の通り、彼は私たちの深度更新依存を助けてくれます.しかし、残念なことに、この機能はまだ生産レベルに達していません.gx各バージョンの更新に従ってその利用性を体験できます.今はまだ実験段階です.
Publishing and Releasing
publishライブラリが必要ですが、バージョン番号が変更されていません.デフォルトでは許可されていません.'f'オプションで強制的にリリースできます.バージョン番号はpackage.jsonに記録されていますが、アップグレードバージョン番号は
無視:Ignoring files from a publish
gxがpublishで無視されるファイルを
中央庫:Repos
gxは、mavenのように中央ライブラリを指定することができますが、ipfsのネットワークは不安定なpc機で構成されていることが多いので、nodeを追加して中央ライブラリとしても信頼できないです.このライブラリはあなた自身が配置したものでない限り、臨時であれば追加することは推奨されません.
ローカル開発テストで、サーバー上でコンパイルと実行を実行したいなら、サーバー上でも少なくとも1つのipfs daemenを実行します.この時、直接にローカルのipfsをサーバーに接続してください.例えば、「ipfs swarm connectサーバipfsid」というように、クロスコンパイルを選択してもいいです.goが提供するクロスコンパイル能力はとても満足できます.新しい中央ライブラリを追加します. は、ローカルに追加された中央ライブラリ を一覧表示する.指定中央ライブラリに含まれるライブラリ のリストが表示されます.指定された中央ライブラリからライブラリを導入する .
ソースの位置: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を使っていません.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