İçeriğe geç
Educora
İleri16 dk14 / 27

Modüller ve modern araçlar

Kodu `import` ve `export` ile dosyalara böl, npm ile paket ekle ve profesyonellerin kullandığı araçlarla tanış: Vite, ESLint, Prettier.

Kendini test et
Bu derste öğreneceklerin
  • Adlandırılmış ve varsayılan (default) dışa aktarımları yazmak ve içe aktarmak
  • Tarayıcıda <script type="module"> etiketinin ne sağladığını açıklamak
  • npm'in, package.json dosyasının ve paketlerin rolünü anlamak
  • Paketleyici, linter ve biçimlendiricinin ne işe yaradığını bilmek

Gerçek bir uygulamada on binlerce satır kod bulunur. Hepsini tek bir dosyaya yazarsan bir şey bulmak, ekip olarak çalışmak ve hata düzeltmek kâbusa döner. Bu yüzden kod küçük ve mantıklı parçalara, yani modüllere bölünür; hazır çözümler ise paket olarak eklenir. Bu, JavaScript öğrenmekten onunla profesyonelce çalışmaya geçişin son adımıdır.

Modüller: export ve import

Tanım
Modül

Kendi kapsamı olan ayrı bir dosya. Değişkenleri ve fonksiyonları dışarıdan görünmez; yalnızca export ile açıkça paylaşılanlar başka dosyalara import ile alınabilir.

İki tür dışa aktarım vardır. Adlandırılmış export (export const, export function) bir dosyada istediğin kadar olabilir ve içe aktarırken süslü parantez içinde aynı adla alınır. Varsayılan export (export default) bir dosyada yalnızca bir tanedir ve süslü parantezsiz, istenen herhangi bir adla içe aktarılır.

JavaScript
// math.js
export const PI = 3.14159;

export function circleArea(radius) {
  return PI * radius * radius;
}

export default function greet(name) {
  return `Hello, ${name}!`;
}
math.js dosyası iki adlandırılmış ve bir varsayılan export paylaşıyor.
JavaScript
// app.js
import greet, { circleArea, PI } from './math.js';
import * as math from './math.js';

console.log(greet('Aysel'));
console.log(circleArea(2).toFixed(2));
console.log(PI === math.PI);
Beklenen çıktı
Hello, Aysel!
12.57
true
app.js ihtiyacı olanı alır. import * as math tüm adlandırılmış export'ları tek bir nesnede toplar.
ExportImportNot
export function circleAreaimport { circleArea } from './math.js'ad aynı olmalı
export const PIimport { PI as pi } from './math.js'as ile yeniden adlandırılabilir
export default function greetimport hello from './math.js'parantezsiz, herhangi bir ad

Tarayıcıda modüller

Bir dosyanın modül olduğunu tarayıcıya type="module" özniteliğiyle bildiririz. Böyle bir betikte import/export çalışır, değişkenler global kapsamı “kirletmez”, kod katı modda (strict mode) çalışır ve sayfa tamamen okunduktan sonra başlar. Üstelik modülde await, fonksiyon dışında, dosyanın en üst düzeyinde de yazılabilir:

HTML
<p id="status">Loading the menu...</p>

<script type="module">
  const wait = (ms) => new Promise((resolve) => setTimeout(resolve, ms));

  await wait(1500);

  const menu = ['plov', 'dolma', 'pakhlava'];
  document.querySelector('#status').textContent = `Menu: ${menu.join(', ')}`;
</script>
Önizleme
Normal bir <script> içinde en üst düzeyde await sözdizimi hatası olurdu; modülde ise çalışır.

npm ve paketler

Tarih biçimlendirmek, grafik çizmek, test yazmak; bunların hepsi için başka geliştiricilerin yazdığı hazır paketler vardır. npm (Node Package Manager), Node.js ile birlikte kurulan paket yöneticisidir. Projeyle ilgili bilgiler, bağımlılıklar ve komutlar package.json dosyasında tutulur; indirilen paketler ise node_modules klasörüne gider.

JSON
{
  "name": "weather-app",
  "version": "1.0.0",
  "type": "module",
  "scripts": {
    "dev": "vite",
    "build": "vite build",
    "lint": "eslint ."
  },
  "dependencies": {
    "dayjs": "^1.11.10"
  },
  "devDependencies": {
    "vite": "^5.0.0",
    "eslint": "^9.0.0"
  }
}
dependencies uygulamanın çalışması için gereken paketler, devDependencies yalnızca geliştirme sırasında kullanılan araçlar, scripts ise npm run dev gibi komutlardır.
  1. 1
    Proje oluştur

    Terminalde npm create vite@latest my-app yaz ve şablon olarak Vanilla ile JavaScript'i seç.

  2. 2
    Bağımlılıkları kur

    cd my-app ile klasöre geç ve npm install komutunu çalıştır.

  3. 3
    Paket ekle

    npm install dayjs yaz, sonra kodunda import dayjs from 'dayjs'; ile kullan.

  4. 4
    Geliştirme sunucusunu başlat

    npm run dev yaz ve terminalde gösterilen adresi aç (genellikle http://localhost:5173). Bir dosyayı kaydettiğin anda sayfa kendiliğinden yenilenir.

Modern araçlar

Araç türüNe yaparÖrnekler
Paket yöneticisipaketleri indirir ve güncellernpm, pnpm, Yarn
Paketleyici ve geliştirme sunucusumodülleri site için birleştirir ve sıkıştırırVite, webpack, esbuild
Linterkodu çalıştırmadan hataları ve kötü alışkanlıkları bulurESLint
Biçimlendiricikodu otomatik olarak tek bir düzenli biçime sokarPrettier
Test aracıkodun doğru çalıştığını otomatik olarak kontrol ederVitest, Jest
Alıştırma

Bir package.json dosyasının metni string olarak verilmiş. Onu JSON.parse ile oku ve yazdır: 1) ad@sürüm (weather-app@1.4.2), 2) her bağımlılığı ayrı bir satırda ad sürüm biçiminde, 3) Dev tools: N, yani devDependencies içindeki paket sayısı.

Alıştırma · JavaScript
const text = '{"name": "weather-app", "version": "1.4.2", "dependencies": {"dayjs": "^1.11.10", "lodash": "^4.17.21"}, "devDependencies": {"vite": "^5.0.0", "eslint": "^9.0.0"}}';

// 1) parse the text and print name@version
// 2) print every dependency as: name version
// 3) print Dev tools: N
▸ Beklenen çıktı
weather-app@1.4.2
dayjs ^1.11.10
lodash ^4.17.21
Dev tools: 2

Önemli noktalar

  • Modül, kendi kapsamı olan bir dosyadır; paylaşmak için export, almak için import yazılır.
  • Adlandırılmış export'lar { } içinde aynı adla, export default ise parantezsiz ve herhangi bir adla içe aktarılır.
  • <script type="module"> import/export, kendi kapsamı, katı mod ve en üst düzeyde await sağlar.
  • npm paketleri kurar; projenin bağımlılıkları ve komutları package.json içinde tutulur.
  • Vite projeyi çalıştırır ve derler, ESLint hataları bulur, Prettier kodu biçimlendirir.

Kendini test et

10 soru. Her doğru cevap XP kazandırır.

1 / 10
Bir fonksiyonu başka bir dosyada kullanılabilsin diye nasıl paylaşırsın?