3 شهور بدون تحديث (فترة كافية لقتل الـsource-code الخاص بتطبيقك)

قد عملت سابقا تطبيق vue-commerce وهو باكورة صغيرة يمكن تكبير حجمها لتصبح متجر إلكتروني متوفر به كل المميزات المطلوبة في السوق،
تركت تحديث المشروع لمدة زادت عن الـ 4 أشهر أو أكثر، وعندما عدت للكود لعمل تعديلات اكتشفت ان npm لا يوافق على تشغيل السيرفر إلا بعد تحديث كل الـdependencies بالمشروع، وهذا نموذج لما ظهر عندي بالضبط:

$ npm outdated
>>
Package                            Current  Wanted  Latest  Location
@fortawesome/fontawesome-free       5.10.1  5.12.0  5.12.0  vue-shop
@vue/cli-plugin-babel                3.9.2  3.12.1   4.1.2  vue-shop
@vue/cli-plugin-eslint               3.9.2  3.12.1   4.1.2  vue-shop
@vue/cli-plugin-pwa                 3.11.0  3.12.1   4.1.2  vue-shop
@vue/cli-service                     3.9.2  3.12.1   4.1.2  vue-shop
@vue/eslint-config-prettier          4.0.1   4.0.1   6.0.0  vue-shop
apexcharts                           3.8.6  3.13.2  3.13.2  vue-shop
axios                               0.19.0  0.19.1  0.19.1  vue-shop
babel-eslint                        10.0.2  10.0.3  10.0.3  vue-shop
babel-plugin-module-resolver         2.7.1   2.7.1   4.0.0  vue-shop
bootstrap                            4.3.1   4.4.1   4.4.1  vue-shop
bootstrap-vue                  2.0.0-rc.26   2.2.0   2.2.0  vue-shop
core-js                              2.6.9  2.6.11   3.6.2  vue-shop
critical                             1.3.6   1.3.9   1.3.9  vue-shop
dotenv                               8.1.0   8.2.0   8.2.0  vue-shop
eslint                              5.16.0  5.16.0   6.8.0  vue-shop
eslint-plugin-html                   5.0.5   5.0.5   6.0.0  vue-shop
eslint-plugin-vue                    5.2.3   5.2.3   6.1.2  vue-shop
eslint-plugin-vue-libs               3.0.2   3.0.2   4.0.0  vue-shop
firebase                             6.3.1   6.6.2   7.6.2  vue-shop
mdbvue                               5.6.0   5.6.0   6.2.0  vue-shop
node-sass                           4.12.0  4.13.0  4.13.0  vue-shop
nodemon                             1.19.2  1.19.4   2.0.2  vue-shop
nuxt                                2.10.0  2.11.0  2.11.0  vue-shop
popper.js                           1.15.0  1.16.0  1.16.0  vue-shop
pusher                               2.2.2   2.2.2   3.0.0  vue-shop
pusher-js                            5.0.1   5.0.3   5.0.3  vue-shop
sass-loader                          7.1.0   7.3.1   8.0.1  vue-shop
stripe                               7.8.0  7.15.0   8.0.1  vue-shop
sweetalert2                         8.15.2  8.19.0   9.5.4  vue-shop
vue                                 2.6.10  2.6.11  2.6.11  vue-shop
vue-apexcharts                       1.5.0   1.5.1   1.5.1  vue-shop
vue-cli-plugin-mdb                   1.4.0   1.9.0   2.0.3  vue-shop
vue-i18n                            8.14.0  8.15.3  8.15.3  vue-shop
vue-meta                             2.2.1   2.3.1   2.3.1  vue-shop
vue-router                           3.0.7   3.1.3   3.1.3  vue-shop
vue-template-compiler               2.6.10  2.6.11  2.6.11  vue-shop
vue2-editor                         2.10.0  2.10.2  2.10.2  vue-shop
vue2-filters                         0.7.0   0.7.2   0.9.1  vue-shop
vuefire                              2.1.0   2.2.1   2.2.1  vue-shop
vuesax                              3.10.0  3.11.5  3.11.5  vue-shop
vuex                                 3.1.1   3.1.2   3.1.2  vue-shop

طبعا قمت بتحديث كل الـdependencies !
لا بد من طرح هذه المسألة كموضع اهتمام، ومن الوارد أن تواجه أي مطور تطبيقات

9 Likes

بالفعل ي نصر :exploding_head:

بس يظل تحديث الحزم بدون اي تحكم بذلك قد يسبب في إنهيار البرنامج مع إحتمالية وجود breaking changes في الحزمة.

لهذا من الأفضل السيطرة على عملية التحديث في npm، فالذي يحصل كالتالي:

عندما نقوم بعمل مشروع وتنزيل الحزم يتم تخزين إصدارات الحزم التي نستخدمها في الـ package-lock.json لهذا في تلك الفترة لا نواجه أي مشاكل مع npm install.

لكن بعد فترة لما نجي نشغل المشروع اذا ملف package-lock.json غير موجود فالذي يحصل هو انه يتم طلب عمل تحديث لنسخ الحزم بناء على يسمى بالـ Semantic versioning في npm.

حيث أنه عندما يتم تنزيل حزمة وتسجيلها في الـ package.json يتم وضع قبل رقم النسخة العلامة ^ او ~:

"vue-carousel": "^0.18.0"

ما يعني بأن الملف package.json لا يحمل نسخة محددة وإنما نطاق النسخ التي ممكن تثبيتها في حال وجود تحديثات، اما اذا كان رقم النسخة لا يسبقة اي من هذه العلامات كالتالي:

"vue-carousel": "0.18.0"

حينها ستكون النسخ ثابثة والتطبيق مستقر طالما وانت تركته في حالة استقرار بتلك الحزم

8 Likes

تماما مثل ما ذكر الأستاذ محمد… ما أعتمده في مشاريعي هو تحديد النسخ المسطبة بدقة… و تحديثها يدويا كل مرة في حالة استمريت في ذلك المشروع لتفادي كل المشاكل :ok_hand:

4 Likes

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

3 Likes