複数のバージョンの自動管理
場面の設定
別のクライアントのための別のプロジェクトに取り組んでフリーランスの開発者として、おそらくこの状況で自分自身を発見している:プロジェクトAはJava 8、プロジェクトBはJava 11で実行し、プロジェクトCは、Java 17で実行されます.簡単にこれらのバージョンを切り替えるには、使用している可能性があります
update-alternatives
コマンド.sudo update-alternatives --config java
これはかなりうまく動作しますが、このアプローチには欠点があります.別のバージョンに切り替える必要があるたびに手動でこのコマンドを実行する必要があります.また、このコマンドはすべてのツールで動作しませんnode
or postgres
.この問題を解決する一つの方法はDockerを使うことです.実際、Dockerの目的は、現在のプロジェクトのすべての正しいバージョンを含むイメージを作成することです.しかし、誰もがDockerを知っているわけではなく、すべてのプロジェクトがこのセットアップを構築するためにDockerFileを持っているわけではありません.また、すべてのチームは、DockerFileを構築する時間を持っていない:プロジェクトのサイズに応じて、それは簡単に簡単に1つを作成するために取得することができます.
もう一つの解決策は、中でJava 8の間で自動的にスイッチする魔法の杖のような何かを持つことになっています
project-A
フォルダとJavaproject-B
フォルダなど.実際、この魔法杖は存在し、呼ばれますasdf . 🪄
我々の魔法の杖
だから何が本当に
asdf
? それはあなたのランタイム版(Java、NPM、ノード、Postgres、PHP、さらに多くの)の間に自動的にあなたの現在のフォルダに応じて切り替えるCLIツールです.これを行うには、ファイル名.tool-versions
(あなたがそれを使用する必要があるフォルダにある)は、各ツールの使用するバージョンを知っている.このファイルには、使用する正しいバージョンの各ツールのマッピングリストが含まれています.java openjdk-17
nodejs 17.3.0
postgres 13.5
現在のフォルダには.tool-versions
, asdf
ちょっと親ファイルを見て、そのようなファイルを含んでいる最初のものを見つけてください.その結果、各ツールのデフォルトバージョンを定義する必要がありますasdf
このデフォルトのバージョンは.tool-versions
ファイルが親フォルダに見つかった.デフォルトのバージョンはホームディレクトリに保存されます.~/.tool-versions
. 何か面白いことは、これを行うことができます
.tool-versions
ファイルがGitリポジトリにファイルされるように、あなたの同僚はまた、異なるツールの正しいバージョンを持つことができますasdf
. 💪🏼一例
あなたのデフォルトを言いましょう
node
バージョンは17.3.0ですが、あなたが取り組んでいるプロジェクトの一つは少し古いです.端末を起動し、コマンドを実行するとnode
バージョンは、あなたの現在の1つが表示されます.$ node --version
v17.3.0
このコマンドは、project-A
フォルダ.しかし、あなたが言うならばasdf
これはバージョン2.13.0のnode
このプロジェクトでは、出力が変更されます.$ asdf local nodejs 12.13.0
$ node --version
v12.13.0
そして別のディレクトリに変更するとnode
バージョンは魔法のようにデフォルトの1つに変更されます.$ cd ..
$ node --version
v17.3.0
全く狂った、右?🤯 今すぐセットアップ方法を見てみましょうasdf
(スポイラー警告:それは途方もなく簡単です).ASDFの設定
まず第一に、ダウンロードする必要があります
asdf
( LinuxとMacOSで利用できますが、残念ながらWindowsではない).これを行うには、ちょうどあなたのホームフォルダにGitリポジトリをクローンします.
git clone https://github.com/asdf-vm/asdf.git ~/.asdf
If you are on MacOS, you can simply use
brew
.brew install asdf
一度完了すると、これらの2行を追加する必要があります
.bashrc
(or .zshrc
).. $HOME/.asdf/asdf.sh
. $HOME/.asdf/completions/asdf.bash
そして、それはあなたが正常にインストールしましたasdf
! 🎉用途
使う
asdf
, まず必要なプラグインを追加する必要があります.プラグインはツールに対応しますjava
Javaのバージョンを切り替えるプラグインnodejs
NodeJSのバージョンを切り替えるプラグインなど.プラグインを追加するには、次のコマンドを実行します.asdf plugin add [plugin]
この例では、nodejs
, そこで、このプラグインをインストールします.asdf plugin add nodejs
💡 You can list all the available plugins with the
asdf plugin list all
command. As this will produce a pretty big list, you can filter the results withgrep
.asdf plugin list all | grep node
今私たちは
nodejs
プラグインは、我々は使用するバージョンをダウンロードする必要があります.我々の場合では、12.13.0と17.3.0の両方のバージョンが欲しい.asdf install nodejs 12.13.0
asdf install nodejs 17.3.0
これらのバージョンをインストールした後、最後のステップは、プロジェクトに応じて使用するいずれかを指定することです.そうするために、12.13.0を使用するプロジェクトのフォルダに頭を向けましょうproject-A
) を選択し、nodejs
バージョン.asdf local nodejs 12.13.0
そして、それ!ノードの12.13.0バージョンはproject-A
ディレクトリとサブディレクトリ.🥳あなたが現在走るならば
ls -al
すべてのファイルを一覧表示するには.tool-versions
正しいノードバージョンを含むファイル.あなたのバージョン管理システムにそれをコミットすることができます.nodejs 12.13.0
💡 When cloning the project containing this file, your colleagues don’t even have to manually install the listed versions: they can simply run
asdf install
, and the magic wand will take care of downloading all required versions.
最後に、私たちが以前に見たように、我々がそうしないデフォルトのバージョンを定義する必要があります
.tool-versions
ファイルをその中で、または、その親フォルダで.この場合、デフォルトのノードのバージョンは17.3.0になります.asdf global nodejs 17.3.0
💡 You can also specify a version for the current shell.
asdf shell nodejs 17.3.0
そして、それは、我々は正常に手動で我々の新しいバージョンのおかげで我々のランタイム版の間で切り替えることの痛みを取り除くことができました.🪄
ラッピング
ありがとう
asdf
, 当社のランタイム版が自動的に管理されます.新しいプラグインを使用する必要がある場合、手順は常に同じです.asdf plugin add [plugin]
asdf install [plugin] [version]
asdf local [plugin] [version]
asdf global [plugin] [version]
asdf
このプロジェクトの裏でチームをサポートする.😉私はこの記事があなたにとって有益であることを望みます、そして、私は次のものであなたに会います.🤘🏼
私からのより多くの記事
カスタム反応フック
ルダル🚀 ・ 2月26日・ 7分読む
なぜあなたのgithubプロファイルが吸う?
ルダル🚀 ・ 月3日・ 5分読む
コンソールを取る次のレベルへのログ
ルダル🚀 ・ 4月29日・ 3分読む
Reference
この問題について(複数のバージョンの自動管理), 我々は、より多くの情報をここで見つけました https://dev.to/iamludal/asdf-automatic-management-of-multiple-versions-1k21テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol