دليل إلى npm: مدير الحزم Node.js
نشرت: 2022-03-11تعد JavaScript هي اللغة الأكثر استخدامًا بسهولة عندما يتعلق الأمر بتطوير مواقع الويب وتطبيقات الويب. إن تعدد الموارد مذهل ، بل والأكثر من ذلك ، عدد المكتبات المتاحة.
في البداية ، تكون هذه المكتبات قليلة ويسهل صيانتها ؛ ومع ذلك ، سرعان ما يبدأ جحيم التبعية الكافي والمطلوب حل أكثر نضجًا.
أدخل Node Package Manager (npm) - مدير حزم JavaScript يستخدم بشكل ملحوظ مع Node.js ، على الرغم من أنه يمكن استخدامه بشكل مستقل أيضًا. يمنحك تحكمًا استثنائيًا في تبعيات مشروعك ويوفر طريقة رائعة للمساهمة في عالم مفتوح المصدر.
يمكنك البدء ببساطة عن طريق تشغيل npm install <package name> وحقنها في ملف JavaScript الخاص بك.
هل تريد تثبيت إصدار محدد؟ لا مشكلة. قم بتشغيل npm install <package name>@1.2.3 .
هل تريد تثبيت حزمة على مستوى العالم (مثل Mocha أو Angular-CLI)؟ فقط أضف a -g مثل: npm install -g angular-cli mocha .
من المسلم به أن معظم حالات الاستخدام تتوقف عند تثبيت npm ، وليس هناك حاجة لأي شيء آخر. ومع ذلك ، يحتوي npm على الكثير من الميزات الإضافية ، والتي سأوجهك إليها ، مع إبراز تلك التي أعتبرها ضرورية ، أو مفيدة حقًا ، أو رائعة.
أوامر CLI
CLI هو المكان الذي يقضي فيه المستخدمون معظم وقتهم في التفاعل مع npm ، وواجهة المساعدة الخاصة به مفيدة بالفعل.
تقدم مساعدة الاستعلام ( npm help ) مجموعة كاملة من الخيارات ، ويمنحك تشغيل npm help-search <searchText> قائمة بنتائج البحث مباشرة من علامة التخفيض في npm.
فيما يلي الأوامر الأساسية التي تبرز.
install: تم ذكره هنا بسبب ضرورته المطلقة عند العمل مع npm. تُستخدم إما لتثبيت حزمة جديدة محليًا أو عالميًا (عند إضافة-g) أو لتثبيت التبعيات المدرجة في ملفpackage.json(المزيد حول ذلك لاحقًا).uninstall: هذا أيضًا ضروري. يتم استخدامه لمسح حزمة معينة من دليلnode_modulesإما محليًا أو عالميًا (عند إضافة-g).access: هذا هو ملعب مسؤولي أذونات المستخدم npm ضمن سياق مؤسسات npm والحزم (الخاصة) المحددة النطاق. أشياء قوية على محمل الجد. تُستخدم جنبًا إلى جنب معowneradduserteam، وما إلى ذلك ، فهي توفر تحكمًا دقيقًا في من يمكنه الوصول إلى ماذا.bin: أين يتم تثبيت الحزم على وجه الأرض؟ قم بتشغيل هذا الأمر لمعرفة مسار الملف المطلق.cache: إذا بدأت في تثبيت الحزم من npm إلى اليسار واليمين والوسط ، فإن هذا الأمر مفيد جدًا. يمكنك إما استدعائها باستخدام الأمرlsالفرعي للاطلاع على قائمة بالحزم المخزنة مؤقتًا محليًا أو باستخدام الأمر الفرعيcleanلمسح جميع الحزم الموجودة في ذاكرة التخزين المؤقت. مرة أخرى عندما كان سجل npm لا يزال غير مستقر بعض الشيء ، كان هذا ضروريًا للعودة إلى بيئة مستقرة أو لإعادة تعيين الأشياء عندما لم تقم بإعداد أذونات npm بشكل صحيح.config: سوف ندخل في خيارات التكوين المختلفة لاحقًا ، لكن هذا الأمر يتعامل بشكل أساسي مع خصائص التكوين المستمرة في ملف التكوين المحلي أو العام باستخدامsetالأوامر الفرعية أوgetأوdelete.dedupeأوddp: عند العمل في مشروع خلال فترة زمنية طويلة وتثبيت الحزم مباشرة من npm ، فإن هذا الأمر سيرشد شجرة الحزمة المحلية ويحاول تبسيط التبعيات.link: عندما تقوم بتطوير حزمة npm الخاصة بك ، فإن هذا يسمح لك بإنشاء ارتباط رمزي للسياق العام بحيث يمكن اختباره كما لو تم تثبيته عالميًا من سجل npm. على سبيل المثال ، إذا كنت تكتب أداة تجميع في عقدة بها CLI مثبتًا عالميًا ، فيمكنك تشغيل هذا الأمر واختبار سلوك CLI الخاص بك دون الحاجة إلى نشره أولاً.ls: يتم استخدامه لتصور تبعيات الحزم وتبعياتها في هيكل شجرة. من الرائع رؤيته ومفيد أيضًا للمقارنات مع المشاريع الأخرى.outdated: يستخدم هذا لتقييم الحالة الحالية للتبعيات المثبتة وما إذا كانت قديمة أم لا. في المشاريع التي تكون فيها قائمة تبعية الجذر مئات الأسطر ، يكون الفحص اليدوي للحزم قريبًا من المستحيل. تتيح لك إضافة-g --depth=0إلى هذا الأمر التحقق أيضًا من الحزم المثبتة عالميًا.publish: هذا الأمر ضروري عند تطوير الحزمة الخاصة بك لـ npm. يفعل بالضبط كما يوحي الاسم ؛ تنشر الحزمة الخاصة بك إلى سجل npm.search: استخدم هذا للبحث في التسجيل عن جميع الحزم التي تحتوي على النص المقدم في الوسيطة الثالثة.shrinkwrap: باختصار ، تسمح لك هذه الأوامر بتأمين إصدارات تبعية معينة في حزمة بالترتيب ، بحيث لا يكسر رقم semver (الإصدار الدلالي) كود الإنتاج.star: هل تعجبك حقًا الحزمة التي تستخدمها؟ استخدم هذا الأمر لإظهار تقديرك مباشرة من المحطة ، والذي ينعكس بعد ذلك على صفحة الحزمة في سجل npm.update: هذا عادة ما يتبع الأمرoutdatedلتحديث أي حزم قديمة.version: يمنحك هذا اختصارًا لإخراج خاصية إصدارpackage.json، والقيام بعلامة git الكل في واحد.
لاحظ أن معظم هذه الأوامر يمكن أن تأخذ أوامر فرعية و / أو تكوينات ، وهذه القائمة ليست بأي حال من الأحوال مناقشة نهائية على CLI.
npm- التكوين
يعد التكوين جزءًا رئيسيًا من npm ، وهناك طرق متعددة يمكن من خلالها ضبط متغيرات التكوين.
التكوين عبر CLI والمتغيرات البيئية
أولاً ، يمكن ضبط التكوين عبر CLI من الجهاز.
عادةً ما يبدو شيئًا كالتالي: npm <command> --<configuration option> [<optional value>] .
إذا لم يتم تحديد القيمة ، فسيتم تعيين الخيار على "صواب" افتراضيًا.
على سبيل المثال ، لنفترض أنك تعمل على حزمة npm محددة النطاق (خاصة) ، وقررت نشرها كحزمة عامة.
يمكن القيام بذلك بسهولة عن طريق إلحاق --access=public بأمر publish الخاص بك. إذا لم نحدد الخاصية لتكون عامة ، فسيتم تقييد الخاصية الافتراضية (خاصة).
لا يستمر التهيئة الملحقة بأوامر أخرى مثل هذا في كل مكان ، لذلك قد يصبح من الصعب تعيين مجموعة من التكوينات عبر CLI.
في تلك الحالات ، قد يكون من الأفضل ضبط التكوين باستخدام المتغيرات البيئية.
سيتم استخدام أي متغير بيئي مع البادئة npm_config_ لتكوين npm.
على سبيل المثال: export npm_config_registry=localhost:4321 خيار تكوين التسجيل بشكل عام ، وعندما يتم تنفيذ npm ، سيستخدم سجل npm الموجود في المضيف المحلي على المنفذ 4321.
التكوين عبر ملف npmrc
يمكنك أيضًا تعيين خيارات التكوين باستخدام ملف .npmrc الخاص ، والذي يمكن تعيينه على مستويات مختلفة وفقًا لمتطلباتك:
- مستوى المشروع: في جذر كود المشروع مع ملف
package.jsonالخاص به ، عادةً ما يكونpath/to/project/.npmrc - مستوى المستخدم: الدليل الذي يقوم بتكوين حساب مستخدم معين ، عادةً
~/.npmrc - المستوى العام: الدليل الذي يبحث فيه npm عن التكوينات العامة ، عادةً
$PREFIX/etc/npmrc - المستوى المدمج: كن حذرًا. هذا التكوين ليس فقط عالميًا ولكنه أيضًا جزء من الكود المصدري npm ، وتوصي أفضل الممارسات (تتطلب في الواقع) ألا نغير الكود الذي لسنا مسؤولين عن صيانته. يمكن العثور عليه عادةً في
/path/to/npm/npmrc.
يمكن تعديل إعدادات التكوين في ملف .npmrc واستمرارها باستخدام CLI عن طريق تشغيل أمر بهذا التنسيق: npm config set <key> <value> .
على سبيل المثال ، يمكنك تشغيل npm config set access public لجعل تكوين النشر لحزمة محددة النطاق (خاصة) عامة بشكل دائم.
افتراضيًا ، سيستمر هذا الأمر في التهيئة محليًا (تكوين مستوى المستخدم كما هو موضح أعلاه) ، ولكن يمكنك إضافة -g عالميًا.
عندما يحتاج التكوين المستمر إلى أن يحدث على مستوى المشروع ، أو على المستوى المضمن ، يجب تعديل ملف .npmrc باستخدام محرر نصوص.
التكوين عبر package.json
أخيرًا ، يمكن ضبط التكوين من ملف package.json . ومع ذلك ، نادرًا ما يتم استخدام هذا (ويجب استخدامه فقط إذا كان مطلوبًا بشكل صريح) ، لأن ملف .npmrc على مستوى المشروع هو المكان المفضل تقليديًا لضبط تكوين الحزمة.
إعدادات التكوين البارزة
access: كما تمت مناقشته أعلاه ، يتم استخدامه لتعيين الأذونات.always-auth: من المهم ملاحظة أن هذا الإعداد افتراضي على false. عند تعيينه على "true" ، سيطلب npm دائمًا المصادقة عند الاتصال بالسجل.ca: افتراضات إلى المرجع المصدق (CA) npm. يمكن تغييره إلى "لاغٍ" للسماح بالوصول إلى المسجلين المعروفين فقط ، أو إلى شهادة CA معينة لمنح حق الوصول إلى ذلك الشخص المحدد فقط. نادرًا ما يتم استخدام هذا الإعداد ، جنبًا إلى جنب معcafileوcertوstrict-ssl، ولكن تحدث عن جانب الأمان والموثوقية في npm ، مما يتيح راحة البال في معرفة أن الحزمة التي تقوم بتثبيتها تأتي من المصدر الذي تتوقعه.color: يتم تعيين هذا الإعداد افتراضيًا على "true" ، مما يمنحك استراحة من الكآبة القياسية للجهاز الطرفي عن طريق تلوينstdoutالذي تسمح به واصفات ملفات tty. إذا تم الضبط على خطأ ، تظل المحطة باهتة. عندما يتم ضبطه علىalways، يتم إخراجه بالألوان دائمًا.depth: يسمح هذا الإعداد بالتحكم الدقيق في ما تراه بالأوامر العودية ، مثلlsoutdated، من خلال تعيين مدى عمق تنفيذها. ستقوم القيمة 0 بتقييم المستوى الأول فقط من التبعيات بينما سيؤدي اللانهاية (الافتراضي) إلى تقييم جميع مستويات التبعيات. الاستثناء من هذه القاعدة هو عند استخدامها معoutdated؛ في هذه الحالة ، يتم تفسير اللانهاية على أنها 0 لضمان المزيد من المخرجات ذات الصلة.dev: يتم تعيين هذا على false افتراضيًا ، ولكن عند ضبطه على true (عند إجراءnpm install) ، سيتم تثبيت جميع تبعيات التطوير في ملفpackage.jsonجنبًا إلى جنب مع التبعيات العادية.dry-run: عند ضبط هذا الإعداد على "صحيح" ، لن يقوم npm بإجراء أي تغييرات على الحزمة الخاصة بك ، ولكنه سيخبرك بدلاً من ذلك بما كان سيفعله. يمكن أن يكون هذا مفيدًا جدًا عند تشغيل أوامر معينة ، مثلdedupeأوupdate.
git-tag-version: يتم تعيينه افتراضيًا على "صواب". يضع هذا الإعداد علامة على إصدار في git عند تشغيل الأمرnpm version. إذا كنت تستخدم npm كمدير الحزم لمشروع كبير يحتوي على علامات إصدارات في git ، فيمكن أن يوفر لك الوقت ، وتذكر تحديث ملفpackage.jsonنيابةً عنك.loglevel: بشكل افتراضي ، يتم تعيين هذا علىwarn، مما يعطي خطأ وتحذيرًا عند تشغيل أوامر npm. تشمل الإعدادات الأخرىsilent، والذي لا يوفر أي إخراج ؛error، الذي يسجل الأخطاء فقط في الإخراج ؛http، الذي يعلن فقط عن أخطاء طلب http ؛info، للحصول على إخراج إعلامي تريد) ؛verbose، والذي يسجل كل شيء تقريبًا ؛silly، والتي ، كما يوحي الاسم ، تعطي قدرًا سخيفًا من المخرجات ثم بعضها.production: عند ضبط هذا على صحيح ، يعمل npm وفقًا لذلك ويقوم بتشغيل جميع الأوامر في وضع الإنتاج. هذا يعني أنه لن يتم تثبيت التطوير أو التبعيات الاختيارية ، ولن يتم تنفيذ أي مهام متعلقة بالتطوير.rollback: عند التعيين على "true" ، تتم إزالة جميع عمليات التثبيت الفاشلة. يكون هذا مفيدًا عند فشل تثبيت التبعيات. اعتمادًا على مستوى التسجيل الخاص بك ، يجب أن تكون قادرًا على رؤية التثبيتات التي فشلت ، وتدوين ذلك ، وتشغيل الأمرnpm installمع ضبط خيار التراجع على "true". بعد ذلك ، مع ملاحظاتك والتثبيت التجريبي (كما هو موضح أعلاه) ، يمكنك بعد ذلك تصحيح المشكلة.حفظ
: When installing a package directly from the registry, you can append–saveto the command which will add the installed package to the dependencies option in thefile. For example,file. For example,سيضيف npm install Lodash` لوداش إلى تبعياتك.save-dev: على غرار خيار حفظ التكوين ، أضف--save-devعند تثبيت حزمة ، وستتم إضافته بعد ذلك إلى خيار devDependencies في ملفpackage.json.save-optional: على غرار خيار حفظ التكوين ، أضف--save-optionalعند تثبيت حزمة ، وستتم إضافته بعد ذلك إلى خيار التبعيات الاختيارية في ملفpackage.json.save-exact: عند تثبيت الحزم ، تقوم خياراتsavesave-devsave-optionalبتعديل ملفpackage.jsonعن طريق إدراج الحزمة المثبتة في الخاصية الخاصة بها باستخدام مشغل نطاق semver. عند استدعاء إعداد التكوين "حفظ دقيق" بقيمة صواب ، بالاقتران مع أحد الإعدادات المذكورة أعلاه ، يتم استخدام رقم إصدار محدد ، مع تجاهل نطاق semver.save-prefix: هذا يعيّن عامل نطاقsave-devعند استخدامsaveأو حفظ أوsave-optional. الافتراضي هو^، مما يسمح بإجراء ترقيات طفيفة على الحزم عند التثبيت. يمكن تعيين هذا إلى أي عامل تشغيل صالح لنطاق semver.tag-version-prefix: الافتراضي التقليدي هوv، مع تحديد ما تم إلحاقه مسبقًا بإصدار علامة git عند تشغيلnpm version.
تحديث npm باستخدام npm
يمكنك أيضًا استخدام npm لتحديث نفسه.
ما عليك سوى تشغيل npm install -g npm@latest ، وسيتم تحديث npm إلى أحدث إصدار مستقر. من المهم ملاحظة أن كل إصدار من Node.js يأتي مع إصدار محدد من npm ، وفي تجربتي ، يجب ألا تعبث بهذا الاقتران كثيرًا.
في نهاية اليوم ، توصيتي هي التمسك بالاقتران كما هو مقصود.
عند استخدام npm كأداة قائمة بذاتها ، تأكد من فهمك للآثار المترتبة على استخدام أي إصدار تختاره. هناك أداة رائعة لإدارة إصدارات Node.js المختلفة (وبالتالي إصدارات npm) على نفس النظام يسمى nvm.
ملف package.json
يعد ملف package.json عنصرًا حاسمًا يربط كل شيء معًا.
إنه مطلب لنشر حزمة في سجل npm ، وهو المكان الذي يأتي فيه جزء الإدارة من التبعيات إلى الحياة.
يحتوي على حقلين مطلوبين ، وهما "الاسم" و "الإصدار" ، ويجب أن تكون هذه الخصائص معًا معرفًا فريدًا.
يجب أن يلتزم حقل الاسم بقواعد معينة ، على النحو المحدد في وثائق npm حول التسمية ، ويخضع حقل الإصدار لخصائص semver.
علاوة على ذلك ، يمكنك الحصول على قائمة من التبعيات بطول ميل واحد ، وتحديد إصدار معين لاستخدامه لكل منها ، باستخدام إصدارات semver وعوامل النطاق. فيما يلي قائمة بالخصائص الأخرى البارزة.
"رئيسي"
يحدد "main" نقطة الدخول إلى تطبيقك ، والتي يتم تعيينها افتراضيًا على index.js . اعتمادًا على الاتفاقية أو إطار العمل الخاص بك ، قد يكون app.js أو main.js يمكنك بالطبع صنع أي شيء تريده.
"نصوص"
هذه خاصية تم الاستخفاف بها.
أولاً ، يمكن استخدامه للقيام بأشياء في مرحلة ما قبل النشر.
ثانيًا ، يوفر مكانًا حيث يمكنك تسمية مجموعة من الأوامر المستخدمة بشكل متكرر ، بدءًا من مهام الإنشاء (المحددة في gulp أو grunt) ، أو تشغيل تثبيت التبعيات الأخرى (بشيء مثل bower) ، أو بدء خادم تطوير باستخدام حزمة الويب ، أو تشغيل مجموعة من أوامر bash.
"التبعيات"
هذه الخاصية عبارة عن قائمة بالحزم التي يحتاجها تطبيقك ، جنبًا إلى جنب مع رقم semver المتوافق. إنها خاصية بارزة لأنه يمكن تعديلها من المحطة عند تثبيت الحزم المحلية.
يتم ذلك عن طريق إضافة --save (أو الاختزال -S ) في نهاية أمر npm install .
عند القيام بذلك ، تتم إضافة الحزمة (الحزم) المثبتة حديثًا إلى قائمة التبعيات في ملف package.json الخاص بك.
وبالمثل ، يمكن أيضًا إزالة التبعية عن طريق إضافة --save عند تشغيل أمر npm uninstall .
من المهم أن تكون على دراية بأنماط إصدار semver لكل من التبعيات وما تعنيه.
إذا كانت قاعدة semver شديدة الصرامة ، فستفقد الميزات والتحسينات الجديدة ، بينما إذا كانت قاعدة semver مخففة للغاية ، فيمكن تثبيت إصدار متقطع من الحزمة على طول الخط.
قد يكون من الصعب جدًا حل تثبيت الحزمة المكسورة ، خاصةً عند استخدام الإصدار المصغر من الحزمة.
"devDependencies"
تتيح لك خاصية "devDependencies" ، المنفصلة عن خاصية التبعيات ، تحديد التبعيات التي تُستخدم فقط أثناء مرحلة التطوير وليست مطلوبة لبناء الإنتاج (مثل ESLint وحزم grunt-Contributions و Protractor). تمامًا كما هو الحال مع التبعيات ، يمكن تعديل هذه الخاصية من المحطة بإضافة --save-dev (أو الاختزال -D ) إلى نهاية أمر npm install أو الأمر npm uninstall . ينطبق نفس الحذر على تعيين الإصدار كما هو مذكور ضمن التبعيات.
"سلة مهملات"
هذا هو المكان الذي يمكنك فيه تحديد ملف (ملفات) قابل للتنفيذ لحزمتك ، مثل المسار إلى أداة CLI المساعدة. تخبر هذه الخاصية npm بإنشاء ارتباطات رمزية محلية أو عالمية لملفاتك التنفيذية عند تثبيت الحزمة الخاصة بك.
"التكوين"
كما تمت مناقشته سابقًا ، هذا هو المكان الذي تحدد فيه إعدادات التكوين من خلال ملف package.json الخاص بك.
"نشر"
عند التعيين على true ، سيرفض npm نشر الحزمة.
لا ينبغي الخلط بين هذا وبين إعداد تكوين الوصول.
يعد هذا إعدادًا مفيدًا عندما يكون لديك مشروع يستخدم npm مع package.json الخاص به ولكن لا يُقصد نشره في سجل npm ، سواء كان نطاقًا أو عامًا.
إذا تغيرت نيتك ، فما عليك سوى تغيير الإعداد إلى "خطأ" ، وستتمكن من نشر الحزمة الخاصة بك.
خصائص مخصصة
يقبل ملف package.json أيضًا الخصائص المخصصة ، طالما لم يتم تحديد الاسم أو حجزه بالفعل.
تطوير حزمة npm الخاصة بك
النظام البيئي npm مليء بحزم كتبها آلاف المطورين المختلفين حول العالم. كل منها يحل نوعًا من المشاكل ، ويقدم فكرة مجردة ، أو يقدم تنفيذًا لشيء ما.
هناك احتمالات ، في مرحلة ما ، أنك سترغب أيضًا في تطوير الحزمة الخاصة بك لمشاركتها.
أولاً ، تحتاج إلى تأليف ملف package.json بالحد الأدنى من الخصائص المطلوبة لـ "name" و "version" ، ثم الخاصية "main" لتحديد نقطة الإدخال ، على سبيل المثال index.js.
اكتب الكود الخاص بك في ملف index.js هذا ، أو قم بتسجيل الدخول باستخدام حساب مستخدم npm الخاص بك ، أو قم بإنشاء مستخدم جديد من الجهاز ، وستكون جاهزًا لنشره في سجل npm.
يمكن أن تكون الحزم عامة أو خاصة.
الحزم العامة مجانية للنشر ومتاحة للجميع للاستفادة منها.
لا يمكن نشر الحزم الخاصة ، التي تسمى الحزم المحددة النطاق ، إلا إذا دفعت مستخدمًا للوحدات النمطية الخاصة ، ويمكن تحديدها من خلال @username/ المضاف مسبقًا إلى اسم الحزمة.
يمكن أيضًا نشر الحزم المحددة النطاق بشكل عام عن طريق استدعاء أمر publish مع --access=public .
علاوة على ذلك ، إذا قضيت بعض الوقت في توسيع قاعدة كود الحزمة وتحسينها ، وحان الوقت لنشر إصدار جديد ، يمكنك ببساطة تغيير الإصدار (وفقًا لقواعد semver والاتفاقية) من الحزمة في package.json . json ملف واكتب npm publish .
يمكنك أيضًا استخدام واجهة سطر الأوامر واستدعاء npm version <update_type> ، حيث يكون update_type إما patch أو minor أو major ، كما هو موضح بواسطة semver ، وهذا يؤدي تلقائيًا إلى زيادة رقم الإصدار في ملف package.json .
المنظمات npm
مرة أخرى ، يعد توثيق npm لهذا الأمر ممتازًا ، وسيكون من غير المجدي تكرار كلماتهم.
ما يمكن قوله عن المؤسسات في سياق npm هو أنها جيدة للغاية ، وعند إدارتها بشكل صحيح ، يمكن إدارة وتقييد الفرق الكبيرة والأفراد الذين يعملون على حزم عامة أو محددة النطاق تحت اسم واحد.
على الرغم من صعوبة إتقانها ، إلا أنها مجزية للغاية.
قوة npm
في النهاية ، تعد الوثائق التي توفرها npm شاملة ويجب الرجوع إليها لمعرفة التفاصيل ، ولكن هذه المقالة تقدم نظرة عامة مفيدة لكل من الوظائف الأساسية والأكثر تقدمًا والمتضمنة ، مما ينقل روعة npm.
كما هو الحال مع كل الأشياء ، توجد آراء قوية ويمكن العثور على العديد من العيوب. ولكن إذا لم تكن قد جربت npm مطلقًا (أو العقدة ، لهذا الأمر) ، فابحث عنها واستكشفها بنفسك. من المحتمل أنك ستستمتع به أكثر مما تعتقد.
لمزيد من المقالات الشيقة حول npm ، ضع في اعتبارك قراءة استخدام Scala.js مع npm و Browserify.
