RequireJS mengimplementasikan AMD API (sumber) .
CommonJS adalah cara mendefinisikan modul dengan bantuan exports
objek, yang mendefinisikan konten modul. Sederhananya, implementasi CommonJS mungkin bekerja seperti ini:
// someModule.js
exports.doSomething = function() { return "foo"; };
//otherModule.js
var someModule = require('someModule'); // in the vein of node
exports.doSomethingElse = function() { return someModule.doSomething() + "bar"; };
Pada dasarnya, CommonJS menetapkan bahwa Anda harus memiliki require()
fungsi untuk mengambil dependensi, exports
variabel untuk mengekspor konten modul dan pengidentifikasi modul (yang menggambarkan lokasi modul yang terkait dengan modul ini) yang digunakan untuk memerlukan dependensi ( sumber ). CommonJS memiliki berbagai implementasi, termasuk Node.js , yang Anda sebutkan.
CommonJS tidak dirancang secara khusus dengan mempertimbangkan browser, sehingga tidak cocok di lingkungan browser dengan sangat baik ( saya benar-benar tidak memiliki sumber untuk ini - itu hanya mengatakan di mana-mana, termasuk situs RequireJS. ) Rupanya, ini memiliki sesuatu untuk lakukan dengan memuat asinkron, dll.
Di sisi lain, RequireJS mengimplementasikan AMD, yang dirancang agar sesuai dengan lingkungan browser ( sumber ). Rupanya, AMD dimulai sebagai spin-off dari format Transport CommonJS dan berkembang menjadi API definisi modulnya sendiri. Karenanya kesamaan antara keduanya. Fitur baru dalam AMD adalah define()
fungsi yang memungkinkan modul untuk menyatakan dependensinya sebelum dimuat. Misalnya, definisi dapat berupa:
define('module/id/string', ['module', 'dependency', 'array'],
function(module, factory function) {
return ModuleContents;
});
Jadi, CommonJS dan AMD adalah API definisi modul JavaScript yang memiliki implementasi yang berbeda, tetapi keduanya berasal dari sumber yang sama.
- AMD lebih cocok untuk browser, karena mendukung pemuatan dependensi modul yang tidak sinkron.
- RequireJS adalah implementasi AMD , sementara pada saat yang sama berusaha untuk menjaga semangat CommonJS (terutama dalam pengidentifikasi modul).
Untuk lebih membingungkan Anda, RequireJS, saat menjadi implementasi AMD, menawarkan pembungkus CommonJS sehingga modul-modul CommonJS hampir dapat langsung diimpor untuk digunakan dengan RequireJS.
define(function(require, exports, module) {
var someModule = require('someModule'); // in the vein of node
exports.doSomethingElse = function() { return someModule.doSomething() + "bar"; };
});
Saya harap ini membantu untuk memperjelas hal-hal!