مقدمة والمعلومات
من خلال واجهة برمجة التطبيقات الرسمية لـ Node.js ، يمكننا أن نرى أن Node.js نفسها توفر العديد من الوحدات الأساسية http://nodejs.org/api/. يتم تجميع هذه الوحدات الأساسية في ملفات ثنائية ويمكن الحصول عليها عن طريق طلب ("اسم الوحدة") ؛ تحتوي الوحدة النمطية الأساسية على أعلى أولوية تحميل (ستعكس عندما تكون هناك وحدة نمطية ووحدة أساسية بنفس الاسم)
(هذه المرة نتحدث بشكل أساسي عن الوحدات المخصصة)
يحتوي Node.js أيضًا على نوع من الوحدة النمطية التي هي وحدة ملفات ، والتي يمكن أن تكون ملف رمز javaScript (.js كاحواك الملف) ، أو ملف نصي تنسيق JSON (.json كملاحقة ملف) ، أو ملف C/C ++ الذي تم تحريره (.NODE كلاحقة ملف) ؛
يتم الوصول إلى طريقة الوصول إلى وحدة الملفات من خلال المتطلبات ('/filename.suffix') تتطلب ('./ fileName.suffix') requrie ('../ filename.suffix') ويمكن حذف لاحقة الملف ؛ بدءًا من "/" يتم تحميله بمسار مطلق ، بدءًا من "./" والبدء بـ "../" يعني التحميل بمسار نسبي ، والبدء بـ "./" يعني التحميل مع ملف في دليل من نفس المستوى ،
يمكن حذف لاحقة الملف المذكورة سابقًا ، ملف JS الأولوية الذي يحاول NodeJS تحميله> ملف JSON> ملف العقدة
إنشاء وحدة مخصصة
خذ عدادًا كمثال
نسخة الكود كما يلي:
var outputval = 0 ؛ // قيمة الإخراج
VAR ZINGREMENT = 1 ؛ //زيادة
/* تعيين قيمة الإخراج*/
وظيفة seoutputval (val) {
outputval = val ؛
}
/* ضبط الزيادة*/
وظيفة setIncrement (GreadrementVal) {
الزيادة = GerimentVal ؛
}
/* الإخراج*/
وظيفة printNextCount ()
{
outputval += الزيادة ؛
console.log (outputval) ؛
}
وظيفة printoutputval () {
console.log (outputval) ؛
}
orports.seoutputval = seoutputval ؛
orports.setIncrement = setIncrement ؛
module.exports.printnextCount = printNextCount ؛
وحدة المصدر عينة الوحدة المخصصة
تركيز المثال هو الصادرات والوحدة النمطية. يوفر واجهة وصول خارجية. دعنا نسميها لرؤية التأثير.
استدعاء الوحدات المخصصة
نسخة الكود كما يلي:
/*
ملف node.js هو وحدة نمطية ، والتي قد تكون رمز JavaScript ، JSON ، أو ملحقات C/C ++ المترجمة.
كائنين مهمين:
المطلوب هو الحصول على وحدات من الخارج
تصديرات تكشف واجهة الوحدة النمطية
*/
var counter = required ('./ 1_modules_custom_counter') ؛
console.log ('أول استدعاء إلى الوحدة النمطية [1_modules_custom_counter]') ؛
counter.seoutputval (10) ؛ // مجموعة العد بدءًا من 10
counter.setIncrement (10) ؛ // اضبط الزيادة على 10
counter.printnextCount () ؛
counter.printnextCount () ؛
counter.printnextCount () ؛
counter.printnextCount () ؛
/*
طلب مكالمات لنفس الوحدة عدة مرات لن يتم تحميلها مرارًا وتكرارًا
*/
var counter = required ('./ 1_modules_custom_counter') ؛
console.log ('وحدة الاتصال الثانية [1_modules_custom_counter]') ؛
counter.printnextCount () ؛
رمز مصدر استدعاء الوضع المخصص
قم بتشغيله وابحث عن أنه يمكن الوصول إلى كل من الأساليب المعرضة للجمهور من خلال الصادرات والوحدة النمطية.
كما ترون في المثال ، أحصل على الوحدة النمطية مرتين من خلال الطلب ('./ 1_modules_custom_counter') ، ولكن بعد المرجع الثاني ، أسمي طريقة printnextcount () تبدأ من 60 ~~~
والسبب هو أن Node.js يستدعي نفس الوحدة عدة مرات من خلال المتطلبات ولن يتم تحميلها مرارًا وتكرارًا. ستقوم Node.js بتخزين جميع وحدات الملفات المحملة وفقًا لاسم الملف ، لذلك لن يتم إعادة تحميلها.
ملاحظة: يشير التخزين المؤقت عبر اسم الملف إلى اسم الملف الفعلي ، ولن يعتبر ملفات مختلفة لأن المسار الوارد مختلف.
هناك طريقة printoutputval () في ملف 1_modules_custom_counter الذي قمت بإنشائه ، والذي لا يوفر طرق وصول عامة من خلال الصادرات أو الوحدة النمطية.
ماذا يحدث إذا قمت بالوصول مباشرة إلى ملف 1_modules_load؟
الجواب هو: Typeerror: Object #<bomb> ليس له طريقة "printoutputval"
الفرق بين الصادرات والوحدة النمطية
من خلال المثال أعلاه ، كل من الصادرات والوحدة النمطية. Asports متاحة للوصول! نظرًا لأن كلاهما يمكن أن يحقق التأثير ، يجب أن يكون هناك اختلاف بسيط ~~~ دعنا نأخذ مثالًا!
نسخة الكود كما يلي:
var counter = 0 ؛
orports.printnextCount = function () {
عداد += 2 ؛
console.log (عداد) ؛
}
var iseq = (الصادرات === module.exports) ؛
console.log (iseq) ؛
2_modules_diff_exports.js رمز مصدر الملف
دعنا ننشئ ملفًا جديدًا 2_modules_diff_exports_load.js واتصل به
نسخة الكود كما يلي:
var counter = required ('./ 2_modules_diff_exports') ؛
counter.printnextCount () ؛
بعد الاتصال ، تكون نتيجة التنفيذ كما هو موضح في الشكل أعلاه
أنا أخرج قيمة ISEQ في ملف 2_modules_diff_exports_load.js (var iseq = (Exports === module.exports) ؛)
ملاحظة: لاحظ أن هناك ثلاث علامات متساوية. إذا كنت لا تعرف ما الذي تبحث عنه عن المعلومات بنفسك!
لا تتسرع في استخلاص الاستنتاجات ، قم بتغيير هذين ملفين JS إلى الرموز المقابلة للوحدة النمطية.
نسخة الكود كما يلي:
// المعدل 2_modules_diff_exports.js رمز المصدر على النحو التالي
var counter = 0 ؛
module.exports = function () {
عداد += 10 ؛
this.printnextCount = function ()
{
console.log (عداد) ؛
}
}
var iseq = (الصادرات === module.exports) ؛
console.log (iseq) ؛
نسخة الكود كما يلي:
// المعدل 2_modules_diff_exports_load.js رمز مصدر الملف كما يلي
var counter = required ('./ 2_modules_diff_exports') ؛
var counterObj = new Counter () ؛
counterobj.printnextCount () ؛
بعد الاتصال ، تكون نتيجة التنفيذ كما هو موضح في الشكل أعلاه
أقوم بإخراج قيمة ISEQ في ملف 2_modules_diff_exports_load.js (var iseq = (exports === module.exports) ؛) ، والخطأ الذي تم إرجاعه ، والذي لا يتماشى مع النتيجة التي تم الحصول عليها من قبل!
ملاحظة: لا تستخدم counter.printnextCount () ؛ للوصول ، ستحصل فقط على موجه خطأ
يقدم واجهة برمجة التطبيقات شرحًا
http://nodejs.org/api/modules.html
لاحظ أن الصادرات هي إشارة إلى الوحدة النمطية. مما يجعلها مناسبة للزيادة فقط. إذا كنت تقوم بتصدير عنصر واحد مثل مُنشئ ، فستحتاج إلى استخدام الوحدة النمطية.
الصادرات هي مجرد إشارة عنوان إلى module.esports. ستقوم Nodejs فقط بتصدير مؤشر الوحدة النمطية. إذا تغير مؤشر الصادرات ، فهذا هو أن الصادرات لا تشير إلى الوحدة النمطية.
الرجوع إلى فهم آخر:
http://www.hacksparrow.com/node-js-exports-vs-module-exports.html
http://zihua.li/2012/03/use-module-exports-or-exports-in-node/
Module.exports هي الواجهة الحقيقية ، الصادرات هي مجرد أداة مساعدة لذلك. العودة النهائية إلى المكالمة هي الوحدة النمطية.
يتم تعيين جميع الخصائص والأساليب التي تم جمعها بواسطة الصادرات إلى الوحدة النمطية. بالطبع ، هناك شرط أساسي لهذا ، أي الوحدة النمطية. لا تحتوي على أي سمات أو طرق.
إذا كانت MODULE.EXPOSTS لديها بالفعل بعض الخصائص والأساليب ، فسيتم تجاهل المعلومات التي يتم جمعها بواسطة الصادرات.
الصادرات والوحدة النمطية.
يدرك ما سبق أيضًا العلاقة والفرق بين الصادرات والوحدة النمطية.
نتيجة استدعاء
كما يتضح من النتائج ، لا يوجد خطأ ، مما يعني أنه يمكن تعريفه على هذا النحو ، ولكن في الوحدة النهائية
على الرغم من أن النتيجة لن يتم إنتاجها من الأخطاء ، إذا كنت تستخدمها على هذا النحو ، فستكون هناك حتما بعض المشكلات في التطوير.
1. من الأفضل عدم تحديد الوحدة النمطية. تصدير وتصدير بشكل منفصل
2.Nodejs مطورو يوصي Module.exports بتصدير الكائنات ، وتصدير لتصدير طرق ومتغيرات متعددة.
آخر...
هناك طرق أخرى مقدمة في API ، لذلك لن أخوض في التفاصيل. بناءً على المثال أعلاه ، ستعرف ذلك بنفسك بمجرد إخراجها.
الوحدة النمطية
إرجاع معرف الوحدة النمطية لسلسلة النوع ، وهو أمر تم تحليله بالكامل بشكل كامل
الوحدة النمطية
إرجاع اسم ملف محسّن بالكامل لنوع السلسلة
الوحدة النمطية
إرجاع نوع منطقي ، مما يشير إلى ما إذا كان التحميل قد اكتمل
الوحدة النمطية
إرجاع الوحدة النمطية التي تشير إلى الوحدة النمطية
الوحدة النمطية
إرجاع مجموعة من جميع كائنات الوحدة النمطية المشار إليها في هذه الوحدة