Sebagai developer, kita sering kali dihadapkan pada masalah pengelolaan perkakas. Menginstal berbagai versi Node.js, Python, Deno, atau tool lainnya bisa menjadi tantangan tersendiri, apalagi jika kita harus menjaga sistem tetap bersih. Di sinilah pkgx muncul sebagai solusi.
pkgx adalah binary mandiri berukuran 4 MiB yang dirancang untuk menjalankan apa saja, di mana saja, dan versi berapa saja, tanpa mengotori sistem Anda. Filosofi di baliknya sederhana, mereka ingin perkakas Anda berfungsi dengan baik sehingga Anda bisa fokus membangun hal-hal hebat tanpa perlu pusing soal setup.
Instalasi Cepat
Memulai dengan pkgx sangat mudah. Anda punya beberapa pilihan sesuai sistem operasi Anda:
bashbrew install pkgx
atau
bashcurl https://pkgx.sh | sh
Untuk pengguna Windows 10+ (meskipun dengan paket terbatas untuk saat ini):
powershellirm https://pkgx.sh | iex
Untuk instalasi tanpa Homebrew di macOS, Anda bisa merujuk ke dokumentasi docs.pkgx.sh/installing-w/out-brew.
Kekuatan Inti pkgx
Jalankan Apa Saja, Tanpa Instalasi Permanen
Pernahkah Anda membutuhkan sebuah tool untuk sekali pakai, namun tidak ingin menginstalnya secara permanen? pkgx menjawab kebutuhan ini.
Perhatikan contoh berikut:
bash$ deno command not found: deno $ pkgx deno Deno 2.1.4 > ^D $ deno command not found: deno
Seperti yang Anda lihat, pkgx berhasil menjalankan Deno. Namun, sistem Anda tetap tidak tersentuh. Tidak ada yang diinstal secara global, menjaga lingkungan kerja Anda tetap bersih dan rapi. Paket-paket diunduh ke ~/.pkgx, tetapi tidak mengotori sistem Anda yang lebih luas.
Jalankan Versi Apa Saja
Fleksibilitas versi adalah keunggulan lain dari pkgx. Anda bisa dengan mudah menjalankan versi spesifik dari suatu program tanpa perlu repot dengan version manager:
bash$ pkgx node@14 --version Node.js v14.21.3 $ pkgx python@2 --version Python 2.7.18
Ini sangat berguna ketika Anda bekerja dengan proyek yang memiliki persyaratan versi yang berbeda.
Beroperasi Di Mana Saja
pkgx dirancang untuk bekerja di berbagai lingkungan, membuatnya menjadi perkakas yang sangat portabel.
| Sistem Operasi | Persyaratan Minimal & Arsitektur | Keterangan |
|---|---|---|
| macOS | >= 11, 64-bit Intel & Apple Silicon | |
| Linux | glibc >= 2.28, x86_64 & arm64 | Membutuhkan libatomic.so.1, libdl.so.2, libm.so.6, libgcc_s.so.1, libpthread.so.0, libc.so.6, ld-linux-x86-64.so.2 |
| Windows | Windows 10+ | Dukungan native eksperimental (paket terbatas) |
| WSL2 | Mendukung semua yang didukung Linux | |
| Docker | Image resmi tersedia: pkgxdev/pkgx |
Anda dapat menggunakan image Docker pkgxdev/pkgx untuk mencoba berbagai versi program:
bash$ docker run pkgxdev/pkgx node@21.1 --version v21.1.0
Bahkan, Anda bisa mengintegrasikannya langsung ke dalam Dockerfile Anda atau menginstalnya ke image apa pun:
dockerfileFROM pkgxdev/pkgx RUN pkgx deno@1.35 task start
Atau dalam image Ubuntu:
dockerfileFROM ubuntu RUN curl https://pkgx.sh | sh RUN pkgx python@3.10 -m http.server 8000
pkgx dalam Alur Kerja Anda
Integrasi CI/CD
pkgx adalah pilihan tepat untuk pipeline CI/CD Anda. Anda bisa menggunakannya untuk memastikan semua dependensi tersedia dan dijalankan dengan versi yang tepat:
Untuk GitHub Actions:
yaml- uses: pkgxdev/setup@v4 - run: pkgx shellcheck
Untuk penyedia CI/CD lainnya, cukup instal pkgx terlebih dahulu:
bashcurl https://pkgx.sh | sh pkgx shellcheck
Kekuatan Skrip dengan pkgx
Salah satu penggunaan paling revolusioner dari pkgx adalah dalam skrip. Dengan menambahkan sintaks khusus di shebang, Anda dapat "memuat" perkakas yang Anda butuhkan langsung ke dalam eksekusi skrip:
bash#! /usr/bin/env -S pkgx +git python@3.12 # python 3.12 runs the script and `git` is available during its execution
Dalam contoh ini, Python 3.12 akan menjalankan skrip, dan git akan tersedia selama eksekusinya.
pkgx juga memudahkan pengelolaan dependensi untuk bahasa lain. Contoh skrip Python yang menggunakan uv untuk dependensi PyPI:
bash#! /usr/bin/env -S pkgx +python@3.11 uv run # /// script # dependencies = [ # "requests<3", # "rich", # ] # /// import requests from rich.pretty import pprint resp = requests.get( "https://peps.python.org/api/peps.json" ) data = resp.json() pprint([(k, v["title"]) for k, v in data.items()][:10])
Hebatnya, paket yang digunakan selama skrip ini tidak diinstal secara permanen atau mengotori sistem Anda atau sistem pengguna lain.
Untuk skrip, ada juga mash, sebuah package manager khusus untuk skrip yang menunjukkan potensi penuh pkgx ketika seluruh ekosistem open source tersedia untuk skrip Anda.
Lingkungan Dev Otomatis dengan dev
pkgx bukan hanya package runner, ia adalah primitif yang dapat digabungkan untuk membangun ekosistem perkakas. Salah satunya adalah dev, tool terpisah yang menggunakan pkgx untuk secara otomatis menentukan dan memanfaatkan dependensi proyek Anda berdasarkan keyfiles (seperti Cargo.toml untuk Rust atau package.json untuk Node.js).
bash$ cd my-rust-proj && ls Cargo.toml src/ my-rust-proj $ cargo build command not found: cargo my-rust-proj $ dev +rust +cargo my-rust-proj $ cargo build Compiling my-rust-proj v0.1.0 # …
Dengan dev, Anda mendapatkan "lingkungan virtual" yang terdiri dari versi spesifik perkakas dan dependensinya yang Anda perlukan untuk proyek Anda.
Ekosistem pkgx
dev: Lingkungan Virtual untuk Proyek Anda
Seperti yang disebutkan di atas, dev menggunakan pkgx (dan pkgm atau shellcode) untuk menciptakan lingkungan pengembangan yang tepat untuk proyek Anda, secara otomatis mendeteksi kebutuhan perkakas dari keyfiles.
pkgm: Instalasi Permanen Jika Anda Butuh
Jika Anda membutuhkan instalasi pkgx packages secara permanen ke /usr/local, ada pkgm. pkgm diinstal bersamaan dengan pkgx dan menyediakan cara untuk menginstal paket secara tradisional. Jika Anda merindukan keringkasan shims dari pkgx^1, Anda bisa menggunakan pkgm shim.
Contoh membuat shim untuk git:
bash$ pkgm shim git created shim: ~/.local/bin/git $ cat ~/.local/bin/git #! /usr/bin/env -S pkgx -q! git
pkgo: Sederhanakan Instalasi Rumit
Beberapa proyek open source memiliki petunjuk instalasi yang panjang dan rumit. pkgo hadir untuk menyederhanakan ini. Dengan bantuan pkgx, pkgo membuat penggunaan tool-tool seperti "Stable Diffusion WebUI" semudah mengetik pkgo.
Recursive Run: Menjelajah Ekosistem Bahasa Lain
pkgx juga memungkinkan Anda menjalankan perkakas dari ekosistem bahasa lain dengan mudah:
bashpkgx uvx cowsay "Run Python (PyPi) programs with `uvx`" # atau pipx pkgx bunx cowsay "Run JavaScript (NPM) programs tools with `bunx`" # atau `npx`
Memahami Apa yang Bisa Dijalankan pkgx
Untuk mengetahui daftar paket yang didukung, Anda bisa mengunjungi pkgx.dev/pkgs atau menggunakan mode query dari CLI:
bash$ pkgx -Q git # ^^ bisa Anda jalankan git? (mengeluarkan nama proyek yang sepenuhnya qualified) $ pkgx -Q # ^^ daftar semua yang bisa dijalankan $ pkgx -Q | grep git- # ^^ ekstensi git apa yang disediakan pkgx?
Migrasi dari pkgx Versi Lama (pkgx^1)
Jika Anda adalah pengguna lama pkgx^1, ada beberapa perubahan:
- Shellcode: Tidak ada lagi shellcode di pkgx inti. Sekarang dev adalah tool terpisah dengan shellcode-nya sendiri. Migrasikan konfigurasi shell Anda dengan:
bash
pkgx pkgx^1 deintegrate pkgx dev integrate env +foo: Fungsi ini sekarang dapat dicapai denganeval "$(pkgx +git)". Gunakanset -adanset +ajika Anda perlu mengekspor lingkungan.pkgx install: Sekarang pkgm yang menyediakan instalasi paket ke/usr/local/.
Kontribusi dan Komunitas
pkgx adalah proyek open source. Jika Anda tertarik untuk berkontribusi:
- Gunakan dev untuk menyediakan Rust.
- Untuk menambahkan paket, lihat
pantry README. - Untuk berkontribusi pada pkgx itu sendiri, klon repositorinya dan lakukan
cargo build.hydrate.rsadalah area utama untuk optimisasi.
Ada juga proses linting pra-PR:
bashcargo fmt --all --check cargo clippy --all-features pkgx npx markdownlint --config .github/markdownlint.yml --fix .
Jika Anda memiliki pertanyaan atau ingin berdiskusi, Anda bisa bergabung di Discord atau GitHub Discussions mereka.
pkgx menawarkan pendekatan yang bersih, fleksibel, dan efisien untuk mengelola perkakas pengembangan Anda. Ini adalah tool yang wajib dicoba bagi siapa pun yang ingin menjaga sistemnya tetap rapi sambil tetap memiliki akses ke ekosistem perkakas yang luas.
