تطبيق بيئة Nix-Shell في Visual Studio Code



واجه الكثير من المطورين مشكلة في حزم الجحيم على محطة عملهم. بعد بضعة أشهر من التجارب ، بما في ذلك اللغات المختلفة وسلاسل الأدوات ، قمت بتثبيت Elixir و Haskell-stack و Node.js / NVM وغيرها من الأشياء المختلفة. تحدث الأشياء الأكثر إثارة عندما تحتاج إلى إصدارات مختلفة من الحزمة نفسها لمشاريع مختلفة. اخترع Humanity بالفعل حلاً مختلفًا لخلق بيئة معزولة وتبديلها عند الحاجة. نحن نستخدم NVM لإدارة إصدارات Node.js أو Python Virtual Env لاختيار إصدارات الأشياء Python أو Docker لإنشاء نظام التشغيل داخل نظام التشغيل. ولكن لا يفي أي من الحلول بجميع متطلباتي لبيئة التطوير المعزولة.

مقدمة لمتطلبات إدارة أداة البيئة المعزولة


كانت أمسية الخريف الباردة. كنت جالساً في غرفة مطبخي وفكرت في العزلة المثالية لمساحة عمل المشروع مع تبعياتهم. في الواقع ، لم أفعل ، ولكن يجب أن تحتوي الفقرة على مقدمة.

بعد ذلك ، كتبت المعايير التالية لأداة العزل المثالية الخاصة بي:

  1. يجب أن تغطي لغات وحزم مختلفة: ليس فقط Node.js أو Python أو Haskell.
  2. لا الافتراضية. نحن صغار جدا لكل هذا القرف. يتيح توفير وقتنا.
  3. يجب أن تكون جميع حزم مساحة العمل سهلة الإزالة.
  4. يجب أن تكون جميع بيئات مساحة العمل سهلة الإزالة.
  5. يجب أن يعمل IDE الخاص بي مع كل هذه الأشياء دون استدعاء Molfars من جبال الكاربات الأوكرانية.

نحتاج إلى كوب من الشاي وجوجل ، ولكن كوب من الشاي في البداية


أتذكر أنه بمجرد أن قرأت عن مدير الحزم التعريفي الذي يمكنه إنتاج بيئة معزولة وإدارة جميع تبعيات النظام وكذلك تبعيات مشروع Haskell.
اسمحوا لي أن أعرف أن الأداة الحالية هي كل ما أحتاج إليه خمس دقائق من غوغلينغ وقراءة 30 دقيقة ومحاولة لمدة ساعة. كل ما احتاجه هو الحب. لكن توقف ، إنها أغنية أخرى. كل ما احتاجه هو Nix.

دعونا نقارن المتطلبات التي كتبت أعلاه من ميزات Nix الفعلية.

  1. متوافق مع ماك - نعم.
  2. يغطي لغات مختلفة وحزم - نعم.
  3. لا الافتراضية - حقا لا الافتراضية.
  4. يجب إزالة جميع حزم مساحة العمل بسهولة - ربما نعم ، لكنني لا أعرف كيف.
  5. يجب أن يعمل IDE الخاص بي مع كل هذه الأشياء - لا. لا توجد طريقة لدمج بيئة Nix في Visual Studio Code.

المفسد في حالة تأهب
لقد مضى وقت طويل. قلت لي ، عندما كان الخريف الخريف الباردة ، هل تتذكر؟ ولكن اليوم هو أمسية مختلفة تماما. إنه خريف دافئ وكل مشاكلي اختفت.

ساعد نفسك كتابة ملحق Visual Studio Code


يساعدك الامتداد على دمج VS Code و Nix-shell معًا.
أنا كسول جدًا في كتابة هذا الفصل من البداية ، لذا فإن رفع الصوت عاليا النص هو نسخ / لصق من README.md الرسمية من ملحقي.

الابتداء


  • بادئ ذي بدء ، يجب عليك تثبيت Nix package manager .
  • أعد تشغيل VS Code لتتأكد من أن المسار لا يعمل بشكل صحيح
  • تثبيت التمديد
  • قم بإنشاء nix env config ، مثل default.nix في جذر مساحة عمل المشروع
  • افتح منصة أوامر (Cmd / Ctrl + Shift + P) واكتب تحديد بيئة
  • من قائمة البيئات الافتراضية لـ nix ، اختر البيئة التي ترغب في تطبيقها

مشروع هاسكل على سبيل المثال


لتشغيل تطبيق Haskell ، يجب عليك تثبيت برنامج التحويل البرمجي GHC. لتجنب تثبيت GHC العالمي والقدرة على استخدام إصدارات مترجم مختلفة في مضيفك ، يمكنك القيام بذلك باستخدام بيئة افتراضية غير محددة.

مثال على برنامج التحويل البرمجي GHC داخل متجر 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; } 

الآن دعونا نحاول فتح مشروعنا في Visual Studio Code.

صورة

يمكنك أن ترى ، IDE لا يمكن العثور على مترجم. لنقم بتشغيل shell.nix env.

صورة

البنغو! كل شيء على ما يرام الآن.

استنتاج


آمل أن يقدم لك هذا المقال بعض الأفكار الجديدة حول كيفية جعل حياتك أسهل وإدارة مشروعك دون فوضى في نظام الملفات الخاص بك.

فوائد هذا النهج هي:

  • جميع الحزم في مساحة عمل منفصلة ولا تؤثر على النطاق العام الذي تريده ضمنيًا
  • IDE الخاص بك رؤية جميع موظفي مساحة العمل والعمل كما هو متوقع
  • bootstrapping مشروع بسيط من ملف التكوين على أجهزة مختلفة

لا يوجد شيء مثالي في عالمنا:

  • تحتاج إلى تعلم لغة جديدة لكتابة ملفات التكوين
  • ليس لخيار Nix CLI أي معنى واضح وفي كل وقت تتفاعل فيه مع أدوات CLI ، فإنك تحتاج إلى مساعدة القراءة
  • جميع لغات البرمجة لديها الاشياء لتثبيت مكتبات النظام الايكولوجي. مثل NPM ، Cabal ، Cargo ، Pip ، إلخ. وعندما تقوم بتثبيت هذا النوع من الحزم عبر Nix ، يكون لديك خطر عدم عمل بعض الصناديق ، وأدوات التحليل ، إلخ.

الروابط الخارجية


Source: https://habr.com/ru/post/ar474916/


All Articles