[TR] JavaScript Modülleri: CJS, AMD, UMD ve ESM Arasındaki Farklar

Halil Atilla
3 min readMar 16, 2023

JavaScript dünyası, sürekli büyüyen ve gelişen bir teknoloji alanıdır. Yıllar boyunca, geliştiriciler farklı modül sistemleri kullanarak daha düzenli ve işbirlikçi bir çalışma ortamı sağlamaya çalıştılar. Bu blog yazısında, dört popüler JavaScript modül sistemi olan CommonJS (CJS), Asynchronous Module Definition (AMD), Universal Module Definition (UMD) ve ECMAScript Module (ESM) arasındaki farkları inceleyeceğiz.

CommonJS (CJS):

CommonJS, Node.js tarafından benimsenen ve sunucu tarafında kullanılan bir modül sistemidir. CJS, require ve module.exports kullanarak modüllerin import ve export işlemlerine izin verir. Bu, modüllerin eş zamanlı olarak yüklenmesini sağlar ve basit bir syntax sunar.

Örnek:

Express.js gibi kütüphane ve freamworkler, CommonJS’yi tercih etmiştir çünkü:

  • Node.js tarafından benimsenmiştir ve bu platformda oldukça yaygındır.
  • Sunucu tarafında çalışan uygulamalar için basit ve eş zamanlı modül yükleme sağlar.
  • Node.js ekosistemi ile iyi entegrasyon ve uyumluluk sunar.
const express = require('express');
const app = express();

app.get('/', (req, res) => {
res.send('Hello World!');
});

app.listen(3000, () => {
console.log('Express uygulaması, 3000 portunda çalışıyor.');
});

2. Asynchronous Module Definition (AMD):

AMD, tarayıcı tabanlı uygulamalar için tasarlanmış bir modül sistemidir. Asenkron modül yükleme desteği sunar, bu da tarayıcıda çalışan uygulamaların performansını artırır. AMD, define ve require fonksiyonları kullanarak modüllerin tanımlanmasına ve import işlemlerine izin verir.

Örnek:

RequireJS gibi kütüphaneler, AMD’yi tercih etmiştir çünkü:

  • Tarayıcı ortamında asenkron modül yükleme imkanı sağlar.
  • Büyük uygulamalar için performans ve kullanılabilirlik avantajları sunar.
  • Bağımlılık yönetimi ve modül tanımlama için esnek bir yapı sunar.
<!-- index.html -->
<!DOCTYPE html>
<html>
<head>
<script data-main="main" src="require.js"></script>
</head>
<body>
</body>
</html>
// main.js
require(['jquery', 'domReady!'], function ($) {
$('body').append('<p>Merhaba Dünya!</p>');
});

3. Universal Module Definition (UMD):

UMD, hem CommonJS hem de AMD gibi modül sistemlerini destekleyen evrensel bir yapı sağlar. Bu sayede, modüller farklı ortamlarda çalışabilir. UMD, hem tarayıcılar hem de sunucu tarafında çalışan uygulamalar için uygundur.

Örnek:

Lodash gibi kütüphaneler, UMD’yi tercih etmiştir çünkü:

  • Hem CommonJS hem de AMD gibi modül sistemlerini destekler, böylece evrensel bir yapı sağlar.
  • Farklı ortamlarda çalışabilme yeteneği sunar (tarayıcı ve sunucu tarafı).
  • Geniş bir kullanıcı tabanına hitap etme avantajı sağlar.
const _ = require('lodash');

const array = [1, 2, 3, 4, 5];
const reversedArray = _.reverse(array);

console.log(reversedArray); // [5, 4, 3, 2, 1]

4. ECMAScript Module (ESM):

ESM, JavaScript’in resmi modül sistemi olarak kabul edilir ve modern tarayıcılarda yerleşik olarak desteklenir. ESM, import ve export anahtar kelimeleri kullanarak modüllerin import ve export işlemlerine izin verir. Bu, statik analiz ve tree shaking gibi optimizasyonlar için daha fazla fırsat sunar. Ayrıca, ESM asenkron modül yükleme desteği sağlar.

Örnek:

Vue.js gibi freamworkler, ESM’yi tercih etmiştir çünkü:

  • Modern JavaScript’in resmi modül sistemidir ve geleceğe yönelik bir seçimdir.
  • Tarayıcılar tarafından yerleşik olarak desteklenir, ek kütüphanelere gerek kalmaz.
  • Statik analiz ve tree shaking gibi kod optimizasyonlarına olanak tanır.
  • Asenkron modül yükleme desteği sunarak daha iyi performans sağlar.
<!-- index.html -->
<!DOCTYPE html>
<html>
<head>
<script type="module" src="main.js"></script>
</head>
<body>
<div id="app"></div>
</body>
</html>
// main.js
import Vue from 'vue';

const app = new Vue({
el: '#app',
data: {
message: 'Merhaba Vue!'
}
});

Sonuç:

JavaScript modül sistemleri, geliştiricilere farklı seçenekler sunarak, kodun daha düzenli ve yönetilebilir olmasını sağlar. CommonJS (CJS) sunucu tarafında kullanılabilirken, AMD tarayıcı tabanlı uygulamalar için daha uygundur. UMD ise hem CJS hem de AMD’yi destekleyerek evrensel bir yapı sunar. ECMAScript Module (ESM) ise modern JavaScript’in resmi modül sistemidir ve asenkron yükleme desteği sunar. Hangi modül sistemini kullanacağınız, projenizin ihtiyaçlarına ve hedeflerine bağlı olarak değişebilir. Bu nedenle, her bir sistem hakkında bilgi sahibi olmak, en uygun seçimi yapmanıza yardımcı olacaktır.

--

--