
Banyak pengembang menghadapi masalah dengan paket neraka di workstation mereka. Setelah beberapa bulan dengan eksperimen, termasuk berbagai bahasa dan peralatan, saya menginstal Elixir, Haskell-stack, Node.js / NVM, dan berbagai hal lainnya. Sebagian besar hal menarik terjadi ketika Anda membutuhkan versi berbeda dari paket yang sama untuk proyek yang berbeda. Umat โโmanusia telah menemukan solusi berbeda untuk menciptakan lingkungan yang terisolasi dan mengubahnya ketika dibutuhkan. Kami menggunakan NVM untuk mengelola versi Node.js, Python Virtual Env untuk memilih versi barang Python atau Docker untuk membuat OS di dalam OS. Tetapi tidak ada solusi yang memenuhi semua persyaratan saya untuk lingkungan pengembangan yang terisolasi.
Memperkenalkan persyaratan untuk mengelola alat lingkungan yang terisolasi
Itu adalah malam musim gugur yang dingin. Saya sedang duduk di ruang dapur saya dan berpikir tentang isolasi sempurna untuk ruang kerja proyek dengan ketergantungan mereka. Sebenarnya, saya tidak melakukannya, tetapi paragraf tersebut harus memiliki pengantar.
Setelah itu, saya menulis kriteria berikut untuk alat isolasi sempurna saya:
- Harus mencakup berbagai bahasa dan paket: bukan hanya Node.js, Python, atau Haskell.
- Tidak ada virtualisasi. Kita terlalu muda untuk semua omong kosong ini. Mari hemat waktu kita.
- Semua paket ruang kerja harus mudah dihapus.
- Semua lingkungan ruang kerja harus mudah dihilangkan.
- IDE saya harus dapat bekerja dengan semua hal ini tanpa memanggil Molfars dari pegunungan Carpathian Ukraina.
Kami membutuhkan secangkir teh dan Google, tetapi secangkir teh pada awalnya
Saya ingat bahwa sekali saya membaca tentang manajer paket deklaratif yang dapat menghasilkan lingkungan yang terisolasi dan mengelola semua dependensi sistem dan dependensi proyek Haskell juga.
Googling lima menit, 30 menit membaca, dan 1 jam mencoba biarkan saya mengetahui bahwa alat saat ini adalah yang saya butuhkan. Yang saya butuhkan hanyalah cinta. Tapi berhenti, itu lagu lain. Yang saya butuhkan adalah Nix.
Mari kita bandingkan persyaratan yang saya tulis di atas dari fitur Nix yang sebenarnya.
- Kompatibel dengan macOS - ya.
- Mencakup berbagai bahasa dan paket - ya.
- Tidak ada virtualisasi - benar-benar tidak ada virtualisasi.
- Semua paket ruang kerja harus mudah dihapus - mungkin ya, tapi saya tidak tahu caranya.
- IDE saya seharusnya bekerja dengan semua hal ini - tidak. Tidak ada cara untuk mengintegrasikan Nix Environment ke Visual Studio Code.
Peringatan spoilerItu sudah lama sekali. Ketika malam musim gugur dingin, saya katakan, apakah Anda ingat? Tetapi hari ini adalah malam yang sama sekali berbeda. Ini musim gugur yang hangat dan semua masalah saya hilang.
Bantu dirimu sendiri. Menulis ekstensi Kode Visual Studio
Ekstensi membantu Anda mengintegrasikan Kode VS dan Nix-shell bersama-sama.
Saya terlalu malas untuk menulis bab ini dari awal, jadi teks di bawah ini adalah copy / paste dari README.md resmi dari ekstensi saya.
Memulai
- Pertama-tama, Anda harus menginstal manajer paket Nix .
- Restart VS Code untuk memastikan jalur untuk menjalankan nix-shell dikonfigurasi dengan benar
- Pasang ekstensi
- Buat nix env config, seperti default.nix di root ruang kerja proyek Anda
- Buka palet perintah (Cmd / Ctrl + Shift + P) dan ketik Select environment
- Dari daftar lingkungan virtual nix pilih yang ingin Anda terapkan
Contoh menjalankan proyek Haskell
Untuk menjalankan aplikasi Haskell Anda, Anda harus menginstal kompiler GHC. Untuk menghindari instalasi GHC global dan dapat menggunakan berbagai versi kompiler di host Anda, mari lakukan ini dengan menggunakan lingkungan virtual nix.
Contoh kompiler GHC di dalam toko NIX (shell.nix):
{ nixpkgs ? import <nixpkgs> {} }: let inherit (nixpkgs) pkgs; inherit (pkgs) haskellPackages; haskellDeps = ps: with ps; [ base lens mtl random ]; ghc = pkgs.haskell.packages.ghc864.ghcWithPackages haskellDeps; nixPackages = [ ghc pkgs.gdb haskellPackages.cabal-install ]; in pkgs.stdenv.mkDerivation { name = "snadbox-haskell-workspace"; buildInputs = nixPackages; }
Sekarang mari kita coba untuk membuka proyek kami dalam Visual Studio Code.

Anda dapat melihat, IDE tidak dapat menemukan kompiler. Mari aktifkan shell.nix env.

Bingo! Semuanya baik-baik saja sekarang.
Kesimpulan
Saya harap artikel ini memberi Anda beberapa ide baru tentang bagaimana membuat hidup Anda lebih mudah dan mengelola proyek Anda tanpa kekacauan dalam sistem file Anda.
Manfaat dari pendekatan ini adalah:- Semua paket di ruang kerja terpisah dan tidak mempengaruhi lingkup global yang Anda inginkan tersirat
- IDE Anda melihat semua staf ruang kerja dan bekerja seperti yang Anda harapkan
- Bootstrap proyek sederhana dari file konfigurasi pada mesin yang berbeda
Tidak ada yang sempurna di dunia kita:- Perlu belajar bahasa baru untuk menulis file konfigurasi
- Opsi Nix CLI tidak memiliki arti yang jelas dan sepanjang waktu ketika Anda berinteraksi dengan alat CLI, Anda perlu bantuan perintah baca
- Semua bahasa pemrograman memiliki hal-hal mereka untuk menginstal perpustakaan ekosistem. Seperti NPM, Cabal, Cargo, Pip, dll. Dan ketika Anda menginstal paket semacam ini melalui Nix, Anda berisiko tidak dapat bekerja dari kotak beberapa linters, menganalisis alat, dll.
Tautan eksternal