RequireJS 2.3 - CommonJS Notes

ملاحظات CommonJS




requirejs

المقدمة

تحدد CommonJS تنسيق الوحدة النمطية . لسوء الحظ ، تم تعريفه دون إعطاء متصفحات قاعدة متساوية لبيئات JavaScript الأخرى. وبسبب ذلك ، هناك مقترحات SpecJS المواصفات لتنسيقات النقل ويتطلب غير متزامن .

يحاول RequireJS الاحتفاظ بروح CommonJS ، باستخدام أسماء سلسلة للإشارة إلى التبعيات ، وتجنب الوحدات النمطية التي تحدد الكائنات العالمية ، ولكن مع السماح بتشفير تنسيق وحدة نمطية يعمل بشكل جيد في المتصفح. RequireJS بتنفيذ " تعريف الوحدة النمطية غير المتزامنة" (النقل / C) سابقاً.

إذا كان لديك وحدات نمطية في تنسيق الوحدة النمطية CommonJS التقليدية ، يمكنك بسهولة تحويلها للعمل مع RequireJS. لن يتم تحويل جميع الوحدات بشكل نظيف إلى التنسيق الجديد. أنواع الوحدات التي قد لا يتم تحويلها بشكل جيد:

  • تتطلب الوحدات النمطية التي تستخدم التعليمة البرمجية الشرطية لإجراء مكالمة تتطلب ، مثل ما إذا تطلبت (بعض الشروط) ('a1') آخر ('a2')؛
  • بعض أنواع التبعيات الدائرية.

التحويل اليدوي

إذا كان لديك بعض الوحدات للتحويل ، فكل ما عليك فعله هو لف الوحدة في هذا الرمز:

define(function(require, exports, module) {
    //Put traditional CommonJS module content here
});

هام : يجب أن يتم سرد وسائط الدالة دائمًا على أنها تتطلب ، أو تصدير ، أو وحدة نمطية ، بتلك الأسماء المحددة وبهذا الترتيب بالضبط ، وإلا ستحدث فوضى. يمكنك ترك صادرات ووحدة نمطية من القائمة ، ولكن إذا كانت هناك حاجة إليها ، فيجب تحديدها بالترتيب الصحيح الموضح هنا.

أداة التحويل

إذا كان لديك العديد من الوحدات النمطية للتحويل ، يحتوي مشروع r.js على أداة تحويل مضمنة في ملف r.js. امنحها المسار إلى الدليل الذي تريد تحويله ودليل الإخراج:

node r.js -convert path/to/commonjs/modules/ path/to/output

هناك عدد صغير من وحدات CommonJS لا تعمل بشكل جيد كما هو محدد () - وحدات ملفوفة. انظر r.js README

للمزيد من المعلومات.

ضبط القيمة المصدرة

توجد بعض أنظمة CommonJS ، بشكل أساسي Node ، تسمح بإعداد القيمة التي تم تصديرها عن طريق تعيين القيمة المصدرة على أنها module.exports. ويدعم هذا المصطلح من قبل RequireJS ، ولكن هناك طريقة أخرى أسهل - فقط قم بإرجاع القيمة من الدالة التي تم تمريرها لتحديد :

define(function (require) {
    var foo = require('foo');

    //Define this module as exporting a function
    return function () {
        foo.doSomething();
    };
});

مع هذا النهج ، فإنك عادة لا تحتاج إلى حجج الدالة "التصدير" و "الوحدة النمطية" ، بحيث يمكنك تركها خارج تعريف الوحدة النمطية.

بناء الجملة البديل

بدلاً من استخدام require () للحصول على تبعيات داخل الدالة التي تم تمريرها لتحديد () ، يمكنك أيضًا تحديدها عبر وسيطة مصفوفة التبعية لتحديد (). يتطابق ترتيب الأسماء في مصفوفة التبعية مع ترتيب الوسيطات التي تم تمريرها إلى دالة التعريف التي تم تمريرها لتعريف (). لذلك المثال أعلاه يستخدم وحدة foo :

define(['foo'], function (foo) {
    return function () {
        foo.doSomething();
    };
});

راجع مستندات API للحصول على مزيد من المعلومات حول هذا النحو.

تحميل وحدات من حزم CommonJS

يمكن تحميل الوحدات النمطية في حزم CommonJS بواسطة RequireJS عن طريق إعداد تكوين RequireJS للتعرف على سمات الموقع والحزمة. راجع قسم API الحزم لمزيد من المعلومات.

أداة التحسين

يحتوي RequireJS على أداة تحسين يمكنها دمج تعريفات الوحدة النمطية معًا في حزم محسّنة لتسليم المستعرض. يعمل كأداة سطر أوامر تستخدمها كجزء من نشر التعليمات البرمجية. راجع مستندات التحسين لمزيد من المعلومات.