tl; dr
Khoảng một tuần trước tôi đã phát hành gói 0.1.0.0 cho dự án Haskell không tầm thường đầu tiên của tôi. Tôi muốn thực thi được dễ dàng để cài đặt và nâng cấp, ngay cả đối với người không phải là Haskeller. Trong the README, tôi đề xuất cài đặt bằng cách sử dụng cabal install
. Đây có phải là một sai lầm?Các phương pháp hay nhất để phân phối ứng dụng Haskell và cập nhật nó
Context
Tôi đã nghe nói về "Cabal địa ngục", nhưng đã không nhận ra bao darn cứng nó sẽ cho người dùng để nâng cấp một bản sao được cài đặt trên toàn cầu của gói, ngay cả khi tôi thận trọng không thực sự thay đổi bất kỳ phụ thuộc phiên bản trong tệp .cabal
. Cuối cùng, tôi đã đi xuống một lỗ thỏ sâu cố gắng cập nhật từ 0.1.0.0 lên 0.2.0.0. Nó đã cảnh báo tôi về việc phá vỡ các phụ thuộc, tôi đã thử nhiều câu thần chú để buộc nâng cấp hoặc thiết lập lại trạng thái cục bộ của mình, và làm cho hệ thống trở nên khó khăn đến mức tôi phải cài đặt lại các gói Brew ghc
và cabal-install
Brew (đây là trên macOS) để mọi thứ trở lại trạng thái mà tôi có thể cài đặt và chạy lại.
Alternatives:
stack install
: Tôi đã được sử dụng ngăn xếp để quản lý môi trường phát triển địa phương, nhưng nó dường như làm việc khá tốt cho độc lập cài đặt là tốt, miễn là bạn có stack cài đặt đầu tiên. (Chỉ cần thiết lập$PATH
của bạn một cách thích hợp.)- Phân phối một tệp nhị phân dựng sẵn: Sẽ tốt đẹp và dễ dàng cho người dùng cuối, nhưng ít nhất là trên OS X, tôi cần phải lo lắng về việc ký mã và tôi thậm chí không có một danh tính được thiết lập cho điều đó nữa.
Vì vậy, trong README của tôi ngay bây giờ tôi đang đề cập đến cả hai stack install
và cabal install
. Nhưng thực hành tốt nhất năm 2016 là gì?
Nếu người dùng chạy vào "cabal-hell" cố gắng cài đặt gói của bạn, đó thực sự không phải là vấn đề của bạn nếu bạn đã chỉ định chính xác phụ thuộc của mình.Để cài đặt ứng dụng, người dùng cabal luôn có thể sử dụng sandbox nếu họ gặp sự cố về phiên bản gói. Cả hai 'stack' và' cabal' đều có vị trí của chúng trong hệ sinh thái Haskell. Tôi nghĩ thực hành tốt nhất là đảm bảo rằng ứng dụng của bạn có thể được cài đặt bằng cách sử dụng một trong hai. – ErikR