متطلبات مقدمة
تأسس مطلواني جيمس بيرك ، وهو أيضًا مؤسس مواصفات AMD.
سوف يتيح لك requirejs كتابة JavaScript بطريقة مختلفة عن المعتاد. لن تستخدم علامات البرنامج النصي لتقديم ملفات JS في HTML ، ولن تحتاج بعد الآن إلى إدارة التبعيات من خلال علامات البرنامج النصي.
Termjs هو إطار تحميل وحدة JavaScript صغيرة جدًا وهو أحد أفضل المنفذيين لمواصفات AMD. أحدث إصدار من requirejs هو 14 ألف فقط بعد الضغط ، وهو خفيف الوزن للغاية. يمكن أن تعمل أيضًا بالتزامن مع الأطر الأخرى ، واستخدام المتطلبات سيؤدي بالتأكيد إلى تحسين جودة الكود الأمامي الخاص بك.
هناك بضع نقاط جديرة بالملاحظة عند استخدام requistjs لتحميل الوحدة غير المتزامنة:
1. طريقتان لكتابة تعريف الوحدة النمطية
1. التعاريف الوظيفية الموجودة في التبعيات
إذا كان للوحدة تبعيات: المعلمة الأولى هي صفيف اسم التبعيات ؛ المعلمة الثانية هي وظيفة. بعد تحميل جميع تبعيات الوحدة ، سيتم استدعاء الوظيفة لتحديد الوحدة النمطية ، لذلك يجب أن تُرجع الوحدة كائنًا يحدد الوحدة. يتم حقن علاقة التبعية في الوظيفة كمعلمة ، وتتوافق قائمة المعلمات مع قائمة اسم التبعية واحدًا تلو الآخر.
define (['a'] ، function (aj) {var hello = function () {aj.hello ('i am c.js') ؛} return {hello: hello}}) ؛ملاحظة: لا يُجبر نوع قيمة الإرجاع للوحدة على أن يكون كائنًا ، ويتم السماح بقيمة الإرجاع لأي وظيفة.
2. تعريف تنسيق وحدة CommonJS
تتطلب: يستخدم لإدخال الطرق التي تعتمد على الوحدات الأخرى.
الصادرات: تصدر كائن يصدر متغير الوحدة النمطية أو الطريقة.
الوحدة النمطية: تحتوي على معلومات حول هذه الوحدة.
require.config ({baseurl: "" ، config: {'b': {size: 'large'}} ، المسارات: {a: 'base/a' ، b: 'base/b' ، c: 'base/c'}}) ؛ define (function (require ، orports ، module) {var aj = require ("a") ؛ var hello = function () {aj.hello ('i am B.JS') ؛} var hello2 = function () {aj.hello ('i am b.js22') ؛} exports.hello = hello ؛ console الصادرات) ؛ console.log ("B.JS: الوحدة النمطية" ، الوحدة النمطية) ؛ console.log ("B.JS: config" ، module.config ()) ؛ // لا يمكن استخدامها معًا ، فسيقوم الإرجاع بكتابة الصادرات السابقة/*return {hello: hello2}*/}) ؛ملاحظة: لا يمكن استخدام كائن الإرجاع والصادرات معًا ، وسيقوم الإرجاع بالكتابة فوق الصادرات السابقة.
فيما يلي المعلومات المطبوعة بعد المكالمة:
الصادرات: يمكن أن نرى أن الصادرات هي سمة للوحدة النمطية.
الوحدة النمطية: يتضمن اسم الاسم المستعار ، URI ، كائن التصدير ، وطريقة معلومات التكوين للوحدة.
التكوين: غالبًا ما نحتاج إلى تمرير معلومات التكوين إلى وحدة نمطية. غالبًا ما تكون هذه التكوينات معلومات على مستوى التطبيق وتتطلب وسيلة لتمريرها إلى الوحدة النمطية.
في requirejs ، يتم تنفيذها بناءً على عنصر تكوين التكوين لـ requirejs.config ().
2. احذر من متغيرات Singleton
احذر من المتغيرات في المفردات ، لأنه بعد أن تتطلب requirejs مرة واحدة ، فإن المتطلبات اللاحقة تستخدم ذاكرة التخزين المؤقت السابقة. لذلك عندما يتم تعريف المتغير في الوحدة ، طالما تم تغيير هذا المطلب ، ستبقى المتطلبات الأخرى متسقة.
define (function () {var index = 0 ؛ var hello = function (msg) {console.log (msg) ؛} var addindex = function () {index ++ ؛} var getIndex = function () {return index ؛} return {hello: hello ، addIndex: getIndex: getIndex: getIndex}}) ؛مُسَمًّى:
تتطلب (['a' ،] ، وظيفة (a) {require (['a'] ، function (a) {console.log (a.getIndex ()) ؛ A.AdDindex () ؛ A.AdDindex () ؛}) ؛ require (['a'] ، function (a) {console.log (a.getIndex ()) ؛}) ؛}) ؛المطبوعة أعلاه هي:
0
2
3. قم بمسح ذاكرة التخزين المؤقت
نظرًا لأن المطلوبة لديها وظيفة التخزين المؤقت ، ولكن أثناء التطوير ، لا نريد أن يتم التخزين المؤقت ، حتى نتمكن من تعيين urlargs في require.config.
urlargs: تتطلب requirejs معلمات استعلام إضافية بعد عنوان URL عند الحصول على المورد.
مثال:
urlargs: "bust =" + (تاريخ جديد ()). GetTime ()
هذا مفيد في التطوير ، ولكن تذكر إزالته قبل الانتشار في بيئة البناء.
4. تحميل وحدات من الحزم الأخرى
تدعم requirejs وحدات تحميل من بنية حزمة CommonJS ، ولكنها تتطلب بعض التكوين الإضافي.
يمكن لتكوين الحزمة تحديد الخصائص التالية لحزمة محددة:
1. الاسم: اسم الحزمة (للحصول على اسم الوحدة النمطية/تعيين البادئة).
2. الموقع: الموقع على القرص. تعتبر المواضع نسبة إلى قيم baseurl في التكوين ما لم تحتوي على بروتوكولات أو تبدأ بـ "/".
3. الرئيسي: بعد بدء استدعاء المتطلبات مع "اسم الحزمة" ، يتم تطبيق الوحدة النمطية في حزمة.
الافتراضي هو "رئيسي" ، ما لم يتم تعيينه هنا.
هذه القيمة نسبة إلى دليل الحزمة.
مثال:
main.js
require.config ({baseurl: "" ، الحزم: [{name: "الطالب" ، الموقع: "package-stu"} ، {name: "teacher" ، الموقع: "package-tea"}] ، urlargs: "bust =" + (new date ()). getTime ()}) tea.hello () ؛tea.js:
define (function (require ، orports ، module) {exports.hello = function () {console.log ('i am a a steach.') ؛}}) ؛Stu.JS:
define (function (require ، orports ، module) {exports.name = 'cape' ؛}) ؛store.js:
define (function (require ، orports ، module) {var stu = require ("student/stu") ؛ exports.hello = function () {console.log ('i am' + stu.name) ؛}}) ؛أشعر أن هناك شيئين غريبين حول طريقة تحميل الوحدات النمطية من الحزم الأخرى (لا أفهم جيدًا):
1. إذا كانت الوحدات النمطية في الحزم الأخرى تشير إلى طريقة الكتابة للوحدات النمطية الأخرى ، فهل سيؤثر المستخدم على طريقة كتابة الوحدة النمطية؟
2. يبدو أن Main.js في الحزم الأخرى عديمة الفائدة ، ولا توجد مشكلة بدون محتوى.
المحتوى أعلاه هو تفاصيل المتطلبات التي يستخدمها المحرر ، وآمل أن تكون مفيدة للجميع!