- 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.jsondosyası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
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.
// 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.// 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);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.| Export | Import | Not |
|---|---|---|
export function circleArea | import { circleArea } from './math.js' | ad aynı olmalı |
export const PI | import { PI as pi } from './math.js' | as ile yeniden adlandırılabilir |
export default function greet | import 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:
<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><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.
{
"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.- 1Proje oluştur
Terminalde
npm create vite@latest my-appyaz ve şablon olarakVanillaileJavaScript'i seç. - 2Bağımlılıkları kur
cd my-appile klasöre geç venpm installkomutunu çalıştır. - 3Paket ekle
npm install dayjsyaz, sonra kodundaimport dayjs from 'dayjs';ile kullan. - 4Geliştirme sunucusunu başlat
npm run devyaz ve terminalde gösterilen adresi aç (genelliklehttp://localhost:5173). Bir dosyayı kaydettiğin anda sayfa kendiliğinden yenilenir.
Modern araçlar
| Araç türü | Ne yapar | Örnekler |
|---|---|---|
| Paket yöneticisi | paketleri indirir ve günceller | npm, pnpm, Yarn |
| Paketleyici ve geliştirme sunucusu | modülleri site için birleştirir ve sıkıştırır | Vite, webpack, esbuild |
| Linter | kodu çalıştırmadan hataları ve kötü alışkanlıkları bulur | ESLint |
| Biçimlendirici | kodu otomatik olarak tek bir düzenli biçime sokar | Prettier |
| Test aracı | kodun doğru çalıştığını otomatik olarak kontrol eder | Vitest, Jest |
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ı.
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çinimportyazılır. - Adlandırılmış export'lar
{ }içinde aynı adla,export defaultise parantezsiz ve herhangi bir adla içe aktarılır. <script type="module">import/export, kendi kapsamı, katı mod ve en üst düzeydeawaitsağlar.- npm paketleri kurar; projenin bağımlılıkları ve komutları
package.jsoniç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.