مقدمة لـ dep: كيفية إدارة تبعيات مشروع Golang

dep - A Go أداة إدارة التبعية

Update @ 2018–11–26: لا تتحرك التكنولوجيا بسرعة فائقة فحسب بل تتغير بسرعة أيضًا. في غضون عام ، هذه المادة عفا عليها الزمن!

ووفقًا لصفحة مشروع dep:

كانت dep "التجربة الرسمية". واعتمدت سلسلة أدوات Go ، اعتبارًا من 1.11 ، (بشكل تجريبي) منهجًا يختلف بشكل كبير عن dep. نتيجة لذلك ، نحن مستمرون في تطوير Dep ، لكن العمل يستعد بشكل أساسي نحو تطوير نموذج أولي بديل لسلوك الإصدار في سلسلة الأدوات.

لمزيد من المعلومات حول إدارة Go build-in الجديدة ، يرجى الرجوع إلى GitHub Wiki - Go 1.11 Modules الرسمية.

شكرا John Arundelbitfield و Erhan Yakut @ yakuter لإظهارهما المشكلة.

-

Update @ 2018–02–03: أوضح Sam Boyer من فريق godep بعض المعلومات غير الصحيحة في هذه المقالة. نعتذر عن سام بوير والقراء عن أي إزعاج.

-

في السابق ، نشرت مقالة حول إدارة التبعية في Go using Glide. تلقيت تعليقات بأن Glide ستصبح قديمة. يقترح فريق Glide أن ينتقل المستخدمون إلى أداة أخرى لإدارة التبعية تسمى dep كتبها فريق Golang.

لدى مجتمع Go الآن مشروع dep لإدارة التبعيات. يرجى النظر في محاولة الهجرة من Glide إلى dep. سيستمر دعم Glide لبعض الوقت ، لكنه يعتبر في حالة دعم بدلاً من تطوير ميزة نشطة.

هناك خطة حول دمج dep في toolchain في إصدار Go 1.10 ، لكن يبدو أنه لا يزال أمامها طريق.

تحديث @ 2018–03:

  • يتم الافراج رسميا.
  • dep لا ينتقل إلى toolchain مع 1.10. يرجى الرجوع إلى خارطة الطريق للحصول على أحدث المعلومات.
وأنا لست سريعًا بدرجة كافية.

إنشاء المشروع داخل GOPATH $

يجب أن يكون مجلد المشروع داخل GOPATH $ من أجل حل مسارات Gopackage. لنقم بإنشاء مشروع جديد على $ GOPATH / src / gitlab.com / ykyuen / dep-example وإضافة الملف التالي.

main.go

طريقة dep

Gopkg.toml و Gopkg.lock

يقرأ dep ملفين باسم Gopkg.toml و Gopkg.lock. لنعد تهيئة هذين الملفين باستخدام الأمر dep init.

[ykyuen @ camus dep-example] $ dep init
  استخدام الرئيسي كقيد لـ dep github.com/dustin/go-humanize المباشر
  قفل في الماجستير (bb3d318) لل dep مباشرة github.com/dustin/go-humanize

كما ترون ، يقوم الأمر dep init بمسح الرموز المصدر وتنزيل جميع الحزم اللازمة للمشروع في مجلد البائع.

يخدم Gopkg.lock تمامًا نفس وظيفة ملف glide.lock. يقوم بإغلاق إصدار الحزم باستثناء الإصدار الذي يجب الحفاظ عليه في Gopkg.toml. باختصار ، يتم إنشاء ملف Gopkg.lock تلقائيًا ويعتمد على عبارات الاستيراد في الإصدار المصدر الذي يتحكم فيه Gopkg.toml.

تحديث إصدار التبعية

لنعدّل Gopkg.toml ونستخدم إصدارًا أقدم قليلاً من الحزمة go-humanization بدلاً من أحدث فرع رئيسي.

ثم تشغيل dep تأكد من تحديث الحزمة إلى الإصدار المطلوب. ما يلي هو الفرق من Gopkg.lock المحدثة.

إضافة تبعية جديدة

يمكن إضافة حزمة جديدة باستخدام الأمر dep confirm -add.

[ykyuen @ camus dep-example] $ dep - إضافة github.com/leekchan/accounting
جارٍ جلب المصادر ...
"github.com/leekchan/accounting" لا يتم استيراده بواسطة مشروعك ، وقد تمت إضافته مؤقتًا إلى Gopkg.lock والبائع /.
إذا قمت بتشغيل "dep تأكد" مرة أخرى قبل استيرادها فعليًا ، فسوف تختفي من Gopkg.lock والبائع /.

الآن لدينا حزمة المحاسبة الجديدة جاهزة في مجلد البائع مع قيود جديدة مكتوبة على Gopkg.toml ومؤمنة في Gopkg.lock. دعونا تحديث main.go على النحو التالي.

main.go

وتشغيله.

[ykyuen @ camus dep-example] $ go run main.go
مرحبا بالعالم
هذا الملف هو 83 ميغابايت.
أنت أفضل صديق لي في 193.
أنت مدين بـ 6،582،491 دولار.
$ 123،456،789.21
$ 12،345،678.00
$ 25،925،925.67
- $ 25،925،925.67
$ 123،456،789.21

المشكلة مع git subodule

من بين الاختلافات الرئيسية في dep مقارنة بـ Glide ، يتم تجاهل الوحدة الفرعية للحزمة. على سبيل المثال ، بعد إضافة حزمة go-goracle / goracle بواسطة dep ، تكون الوحدة الفرعية odpi الداخلية فارغة وتؤدي إلى حدوث خطأ. يمكن العثور على سبب إسقاط الوحدة الفرعية على الرابط التالي.

  • هل هناك أي خطط لإضافة Git subodules support؟

تحديث @ 2018–03:

الفقرة حول Git subodules غير صحيحة.

كتب سام بوير:

يجب أن يكون dep جيدًا تمامًا عند سحب الوحدات الفرعية git في الحالة التي تصفها. لقد قمت للتو بتكرار ما تصفه هنا محليًا ، والمشكلة ليست وحدات فرعية - إنه لا يوجد رمز Go في github.com/go-goracle/goracle/odpi ، لذلك لا يمكن استيراده مباشرةً.
من المحتمل أنك تحتاج إلى إيقاف تشغيل تقليم الحزم غير المستخدمة في Gopkg.toml لهذا المشروع على وجه التحديد ، حيث إن إلغاء الضمان سيؤدي تلقائيًا إلى إزالة ما يبدو أنه غير مستخدم مباشرةً (لكن يبدو أنه يستخدم فعلاً بواسطة cgo).

تحديث @ 2018–04:

تبين أن حزمة go-goracle / goracle لا تعمل مع dep. يمكنك متابعة المشكلة أدناه والتحقق من آخر تحديث من فريق dep.

  • فشل في الحصول على git subodule لحزمة بعد الأمر dep confirm

ملخص

  • DEP هو تماما المرجح أن يكون المسؤول التبعية إدارة أداة في ̶̵̶G̶̵̶o̶̵̶l̶̵̶a̶̵̶n̶̵̶g̶̵̶ ̶̵̶c̶̵̶o̶̵̶m̶̵̶m̶̵̶u̶̵̶n̶̵̶i̶̵̶t̶̵̶y̶̵̶.̶̵̶
  • I̶̵̶f̶̵̶ ̶̵̶y̶̵̶o̶̵̶u̶̵̶ ̶̵̶a̶̵̶r̶̵̶e̶̵̶ ̶̵̶s̶̵̶t̶̵̶a̶̵̶r̶̵̶t̶̵̶i̶̵̶n̶̵̶g̶̵̶ ̶̵̶a̶̵̶ ̶̵̶n̶̵̶e̶̵̶w̶̵̶ ̶̵̶G̶̵̶o̶̵̶l̶̵̶a̶̵̶n̶̵̶g̶̵̶ ̶̵̶p̶̵̶r̶̵̶o̶̵̶̶̵̶̶̵̶̶̵̶̶̵̶̶̵̶̶̵̶̶̵̶̶̵̶̶̵̶̶̵̶̶̵̶̶̵̶̶̵̶̶̵̶̶̵̶̶̵̶
  • إذا كنت تستخدم الإنزلاق في تركة ̶p̶r̶o̶j̶e̶c̶t̶.̶ هل يمكن أن تنظر الهجرة إلى DEP لكن أعتقد أن هناك أي ضرر للاستمرار في استخدام الإنزلاق لفترة حتى DEP رسميا ̶r̶e̶l̶e̶a̶s̶e̶d̶.̶
  • وبالإضافة إلى ذلك، ̶ المفقودين ̶p̶a̶c̶k̶a̶g̶e̶'̶s̶ حدة ثانويه قد يؤدي إلى خلل في الخاص ̶c̶o̶d̶e̶.̶
  • يتم الافراج رسميا.
  • dep يعمل بشكل جيد على سحب git subodule.
  • استخدم المكتبة القياسية كلما كان ذلك ممكنًا. (اقترحه philoserf)
  • يمكنك الخروج من هذا المثال على gitlab.com.

- نشرت أصلا على مدونة Boatswain.