35

私が理解している限り、Nixはcabal サンドボックスの代替です。ようやく Nix をインストールできましたが、サンドボックスをどのように置き換えることができるのかまだわかりません。

Nix とラップされたバージョンの GHC を使用する場合、cabal は必要ないことを理解しています。ただし、パッケージを公開したい場合は、ある時点で cabal を使用してパッケージ化する必要があります。したがって、NIX 内で cabal 構成を作成およびテストできる必要があります。どうやってそれをしますか?

理想的には、cabal サンドボックスに似た環境を希望しますが、NIX 内に「含まれる」ことは可能ですか? 実際、私が本当に望んでいるのは、ネストされたサンドボックスと同等のものです。私は通常、複数のパッケージで構成されるプロジェクトに取り組んでいるためです。

現在のワークフローに関する最新情報

現在、私は 2 つまたは 3 つの独立したプロジェクト (P1、P2、P3) に取り組んでおり、それぞれが 2 つまたは 3 つの Cabal モジュール/パッケージで構成されています。たとえば、P1 については、L11、L12 (ライブラリ) および E11 (実行可能ファイル) です。E11 は L11 に依存する L12 に依存します。実行可能ファイルはプライベートであり、プライベート git リポジトリに保持されているため、主にライブラリから実行可能ファイルを分割しました。

理論的には、各プロジェクトはこの独自のサンドボックス (サブモジュール間で共有) を持つことができます。私はそれを試しました(L11 L12とE11に共通のサンドボックスを用意しました)が、L11を変更すると、E11が依存しているため再構築できないため、すぐに面倒になり、最初にE11をアンインストールしてL11を再コンパイルする必要があります。正確にはそうではないかもしれませんが、同様の問題が発生します。ときどきL11を改造していればこれでいいのですが、実際はE11以上に改造しています。

共有サンドボックスが機能しないため、パッケージ ソリューションごとに 1 つのサンドボックスに戻りました。機能していますが、理想的とは言えません。主な問題は、L11 を変更した場合、それを 2 回 (L11 で 1 回、次に E11 で) コンパイルする必要があることです。また、誰もが知っているように、新しいサンドボックスを開始するたびに、すべてのパッケージをダウンロードして再コンパイルするまでしばらく待つ必要があります。

したがって、Nix を使用することで、プロジェクトごとに個別のカバールの「環境」をセットアップできるようになり、上記の問題がすべて解決されることを望んでいます。

これがより明確であることを願っています。

4

1 に答える 1