mise: مدیریت نسخهٔ Node، Python و Go برای هر پروژه
خلاصهٔ کاملتر
mise ابزاریه که زبانها و ابزارهای توسعه مثل Node.js، Python و Go رو نصب میکنه و برای هر پروژه نسخهٔ خودش رو انتخاب میکنه. نسخهها تو فایل mise.toml پروژه نوشته میشن و وقتی تو اون پوشه کار میکنی، mise اونا رو روی PATH میذاره. مثلاً mise use node@24 python@3.14 هر دو رو نصب میکنه و درخواست نسخهها رو تو کانفیگ ثبت میکنه. اگه از asdf میای، mise فایلهای .tool-versions رو هم میخونه.
انتخاب نسخه اینطوری کار میکنه: mise فایلهای کانفیگ پوشهٔ فعلی، پوشههای بالاتر و کانفیگ سراسری رو میخونه و فایل نزدیکتر برنده میشه. بعد registry اسم کوتاهی مثل node رو به یه backend وصل میکنه (یعنی بخشی که نسخهها رو لیست و نصب میکنه) و backend درخواستی مثل 24 یا latest رو به یه نسخهٔ واقعی تبدیل میکنه. یه lockfile هم میتونه نتیجه رو ثابت نگه داره.
برای استفاده سه راه هست: تو شل تعاملی mise رو activate کنی تا با هر prompt محیط بهروز بشه، تو ادیتورها از shim استفاده کنی (یعنی فایل اجرایی واسطه با مسیر ثابت)، و تو اسکریپت و CI از mise exec -- یا mise run. دستور mise upgrade جدیدترین نسخه رو داخل همون درخواست نصب میکنه؛ مثلاً با node = "24" فقط تا آخرین 24.x میره. با --bump به جدیدترین نسخه میره و خود درخواست رو هم بازنویسی میکنه.
قابلیت بهروزرسانی خودکار فقط تو کانفیگ سراسری (~/.config/mise/config.toml) کار میکنه. با گذاشتن auto_update روی یه ابزار، قبل از اجرای اون ابزار اگه وقت چکش رسیده باشه، mise اول آپدیتش میکنه:
[tools]
claude = { version = "latest", auto_update = true }
node = { version = "24", auto_update = "6h" }آپدیت هیچوقت از درخواست بیرون نمیزنه، پس node = "24" هیچوقت به 26 نمیرسه. فاصلههای کمتر از یه ساعت به یه ساعت گرد میشن. چون minimum_release_age پیشفرض برای بیشتر backendها 24h هست، یه نسخهٔ جدید معمولاً بین ۲۴ تا ۴۸ ساعت بعد از انتشار میرسه. تو CI، حالت آفلاین یا با locked = true هیچ آپدیتی اجرا نمیشه و نسخههای دقیق مثل 24.11.1 هم دست نمیخورن.
mise وقتی یه ابزار پیکربندیشده نصب نباشه، میتونه بهجای خطا دادن خودش نصبش کنه؛ این رفتار با auto_install خاموش میشه. برای پاک کردن هم سه دستور هست: mise unuse درخواست رو از کانفیگ برمیداره، mise uninstall نسخهٔ نصبشده رو پاک میکنه و کانفیگ رو دست نمیزنه، و mise prune نسخههایی رو که هیچ کانفیگی لازمشون نداره حذف میکنه. هر ابزار هم میتونه گزینههایی مثل os، depends، postinstall و lazy داشته باشه.
نکات کلیدی:
- نسخهٔ ابزارها تو mise.toml ثبت میشه و کانفیگ نزدیکتر به پوشهٔ فعلی اولویت داره.
- mise upgrade داخل درخواست میمونه؛ --bump درخواست رو هم بازنویسی میکنه.
- auto_update فقط از کانفیگ سراسری فعال میشه و حداقل فاصلهٔ چکش یه ساعته.
- با minimum_release_age پیشفرض 24h، آپدیت معمولاً ۲۴ تا ۴۸ ساعت بعد از انتشار میرسه.
- تو CI، حالت آفلاین یا با locked = true آپدیت خودکار اجرا نمیشه.
- mise فایلهای .tool-versions رو میخونه و برای .nvmrc باید idiomatic version files روشن باشه.




