RequireJS , AMD API'sini (kaynak) uygular .
CommonJS , exports
modül içeriğini tanımlayan bir nesne yardımıyla modülleri tanımlamanın bir yoludur . Basitçe söylemek gerekirse, bir CommonJS uygulaması şu şekilde çalışabilir:
// 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"; };
Temel olarak, CommonJS, require()
bağımlılıkları getirmek için bir işleve, exports
modül içeriğini dışa aktarmak için bir değişkene ve bağımlılıkları ( kaynak olarak söz konusu modülle ilgili söz konusu modülün konumunu açıklayan) bir modül tanımlayıcısına ( kaynaka ihtiyaç duyduğunu) belirtmeniz gerektiğini belirtir. ). CommonJS, bahsettiğiniz Node.js de dahil olmak üzere çeşitli uygulamalara sahiptir .
CommonJS özellikle tarayıcılar göz önünde bulundurularak tasarlanmadı, bu yüzden tarayıcı ortamına çok iyi uymuyor ( bunun için hiçbir kaynağım yok - sadece RequireJS sitesi de dahil olmak üzere her yerde söylüyor . ) Görünüşe göre, bunun bir şeyleri var eşzamansız yükleme vb. ile yapın.
Öte yandan, RequireJS, tarayıcı ortamına ( kaynak ) uyacak şekilde tasarlanmış AMD'yi uygular . Görünüşe göre AMD, CommonJS Transport formatının bir parçası olarak başladı ve kendi modül tanımı API'sine dönüştü. Bu yüzden ikisi arasındaki benzerlikler. AMD'nin yeni özelliği define()
, modülün yüklenmeden önce bağımlılıklarını bildirmesine izin veren işlevdir. Örneğin, tanım şunlar olabilir:
define('module/id/string', ['module', 'dependency', 'array'],
function(module, factory function) {
return ModuleContents;
});
Bu nedenle, CommonJS ve AMD, farklı uygulamaları olan JavaScript modülü tanımlama API'larıdır, ancak her ikisi de aynı kökenlidir.
- AMD tarayıcı için daha uygundur, çünkü modül bağımlılıklarının eşzamansız yüklenmesini destekler.
- RequireJS , AMD'nin bir uygulamasıdır , aynı zamanda CommonJS'in ruhunu korumaya çalışır (esas olarak modül tanımlayıcılarında).
Sizi daha da karıştırmak için, bir AMD uygulaması olarak RequireJS, bir CommonJS sarmalayıcısı sunar, böylece CommonJS modülleri neredeyse doğrudan RequireJS ile kullanılmak üzere içe aktarılabilir.
define(function(require, exports, module) {
var someModule = require('someModule'); // in the vein of node
exports.doSomethingElse = function() { return someModule.doSomething() + "bar"; };
});
Umarım bu bir şeyleri netleştirmeye yardımcı olur!