2

スタックは通常、将来のビルドで時間を節約するためにパッケージの依存ビルドをキャッシュしますが、実際にはこれが起こらない多くのケースに気付きました。うまくいくと、依存関係の構築に 30 分以上かかることが多いため、時間を大幅に節約できます。

いくつかの作業の後、この問題を説明する簡単な例を分離することができ、誰かがそれを修正するのを手伝ってくれるかどうか疑問に思っていました. この問題は、クローンの後のような新しいビルドのみを指すことに注意してください....同じクローンの2番目のビルドは、実際にはすぐに進みます。


この非常に単純な Main.hs をコンパイルすると

import Network.Haskoin.Internals

main = undefined

このstack.yamlを使用して

resolver: lts-2.15
packages:
- '.'
extra-deps: 
- haskoin-0.1.0.2
- json-rpc-0.2.1.6
- pbkdf-1.1.1.1
- text-1.1.1.4

flags: {}

そしてこの .cabal ファイル

name:                simple
version:             0.1.0.0
cabal-version:       >=1.10

executable simple-exe
  hs-source-dirs:      src
  main-is:             Main.hs
  build-depends:       base
                     , haskoin
  default-language:    Haskell2010

ソースコードを再クローンするたびに、スタックはすべての依存関係を再構築します。

extra-deps、特にと関係があるのではないかと推測していますが、text-1.1.1.4よくわかりません。

4

1 に答える 1

4

私の理解では、リゾルバーを選択すると、スタックは次の場合にパッケージを「キャッシュ」します。

  1. パッケージがリゾルバーの Stackage にあり、かつ
  2. パッケージは、リゾルバーによって指定された依存関係バージョンとまったく同じセットでビルドされます。

リゾルバー LTS-2.15 によって選択されたパッケージ バージョンは、次のページで確認できます。

https://www.stackage.org/lts-2.15

リゾルバー LTS-2.15 のマシン上の「キャッシュ」は、次のようなディレクトリにあります。

~/.stack/snapshots/x86_64-osx/lts-2.15/7.8.4/pkgdb

たとえば、プロジェクトはblaze-builder-0.4.0.1Stackage LTS-2.15にあるものを使用しています。ただし、 にblaze-builder依存しtext、LTS-2.15 のバージョンtext(つまり) を使用していた場合、スタックはLTS-2.15 スナップショット ディレクトリにtext-1.2.0.6キャッシュされます (他のすべての依存関係が LTS-2.15 のバージョンと一致すると仮定します)。ただし、にバージョン 1.1.1.4 を指定したため、スタックは結果を LTS-2.15 スナップショット ディレクトリに保存しません。プロジェクトのディレクトリに保存されます。blaze-builder-0.4.0.1blaze-buildertextblaze-builder.stack-work

非常に多くのパッケージが に依存しているため、Stackage リゾルバーにリストされているtextバージョンを使用することをお勧めします。text

于 2015-10-06T01:40:41.030 に答える