ESM ve CJS Çift Paket Çıktısı
Doğru package.json dışa aktarma alanı yapılandırmasıyla hem ES modülü hem de CommonJS derlemeleri oluşturun
ESM ve CJS Çift Paket Çıktısı, CoddyKit'te ücretsiz bir React Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, React Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. React Academy kursu toplamda 4 dersten oluşur.
ESM Nedir?
ESM (ECMAScript Modülleri), import ve export söz dizimini kullanan resmî JavaScript modül standardıdır. ESM statik olarak analiz edilebilir; paketleyiciler derleme zamanında tam olarak hangi dışa aktarmaların kullanıldığını belirleyebilir ve böylece ağaç sarsmayı mümkün kılar. Modern tarayıcılar ve Node.js, ESM'yi yerel olarak destekler.
CJS Nedir?
CJS (CommonJS), require() ve module.exports söz dizimini kullanır. Node.js'in özgün modül sistemidir ve daha eski Node.js ortamlarıyla, tarihsel olarak CJS kullanan Jest ile ve require() kullanan kodlarla uyumluluk için hâlâ gereklidir. CJS dinamik olarak değerlendirilir; bu da ağaç sarsmayı zorlaştırır.
İki Biçimli Paket: Her İki Biçimi de Sunma
Modern bir npm paketi, uyumluluğu en üst düzeye çıkarmak için hem ESM hem de CJS sunmalıdır. ESM kullanıcıları (Vite, Next.js ve modern paketleyiciler) ağaç sarsmaya uygun içe aktarmalar elde eder. CJS kullanıcıları (daha eski Node.js betikleri ve yapılandırma yapılmamış Jest) require() uyumluluğu elde eder. package.json içindeki exports alanı, Node ve paketleyicilere hangi biçimin kullanılacağını bildirir.
exports Alanı
package.json içindeki exports alanı, koşullu giriş noktalarını tanımlamanın modern yoludur. Örnek: { '.': { 'import': './dist/esm/index.js', 'require': './dist/cjs/index.js', 'types': './dist/esm/index.d.ts' } }. Paketleyiciler ve Node.js 12+, doğru biçimi otomatik olarak seçmek için exports alanını okur.
Eski main ve module Alanları
Daha eski araçlar exports alanını anlamaz. Uyumluluk için ayrıca şunları ayarlayın: CJS çıktısını gösteren main alanı (eski Node require geri dönüşü) ve ESM çıktısını gösteren module alanı (webpack/rollup için standart dışı ancak yaygın olarak desteklenen bir ipucu). Modern araçlar exports alanını tercih eder; eski araçlar main/module alanlarına geri döner.
type: module Kullanımının Sonuçları
package.json içinde "type": "module" ayarının yapılması, paketteki tüm .js dosyalarının ESM olarak değerlendirilmesini sağlar. İki biçim sunuyorsanız açık uzantılar kullanmanız gerekir: type module iken ESM dosyaları için .mjs, CJS dosyaları için .cjs kullanın veya bunun tersini yapın. tsup bunu otomatik olarak yönetir.
.mjs ve .cjs Uzantıları
.mjs (ESM) ve .cjs (CJS) dosya uzantılarını açıkça kullanmak, type alanından bağımsız olarak biçimi belirtir. Bu, belirsizliği ortadan kaldırır. type alanı ayarlanmadığında ve biçim ['esm', 'cjs'] olduğunda tsup, en yaygın kullanıma uygun olarak index.js (ESM) ve index.cjs (CJS) çıktısı verebilir.
İki Biçimli Paket Tehlikesi
Bir paket hem ESM hem de CJS biçimleri sağladığında, kullanıcının paketleyicisi her iki sürümü de aynı işlemde yükleyebilir; örneğin ana uygulama için ESM sürümünü, bir Jest sınaması için CJS sürümünü. Pakette modül düzeyinde durum (React bağlamı gibi) varsa iki örneğin de durumu birbirinden bağımsız olur. Buna iki biçimli paket tehlikesi denir.
İki Biçimli Paket Tehlikesini Azaltma
Tehlikeyi azaltmak için modül düzeyindeki durumu kitaplığınızdan uzak tutun (tekil örüntüler kullanmayın), yalnızca bir biçimin yüklenmesini sağlamak üzere exports koşullarını kesin biçimde kullanın ve sınamaların paketleyicilerini ESM kullanacak şekilde yapılandırması gerektiğini belgelendirin. Bu tehlike esas olarak paylaşılan tekillere sahip kitaplıklar için önemlidir.
İki Biçimli Çıktıyı Sınama
Derlemeden sonra her iki biçimin de çalıştığını doğrulayın. CJS'yi sınayın: node -e "const lib = require('./dist/cjs/index.js'); console.log(lib)". ESM'yi sınayın: node --input-type=module --eval "import { Component } from './dist/esm/index.js'; console.log(Component)". Yayımlamadan önce her ikisi de hatasız çözümlenmelidir.
Birden Çok Giriş Noktası için exports
exports alanı birden çok giriş noktasını destekler: { '.': { import: './dist/esm/index.js', require: './dist/cjs/index.js' }, './utils': { import: './dist/esm/utils.js', require: './dist/cjs/utils.js' } }. Kullanıcılar daha sonra 'your-lib' veya 'your-lib/utils' yolundan içe aktarır ve doğru biçimi elde eder.
package.json exports Alanı
Bir kitaplığın package.json dosyasındaki exports alanının temel amacı nedir?
Ders Özeti: İki Biçimli Paket Çıktısı
ESM, import/export kullanır ve ağaç sarsmayı mümkün kılar. CJS, Node.js uyumluluğu için require() kullanır. Her ikisini de import/require koşullarıyla birlikte package.json içindeki exports alanı aracılığıyla sunun. Eski geri dönüşler: main (CJS) ve module (ESM). Biçimi açıkça belirtmek için .mjs/.cjs uzantılarını veya type: module ayarını kullanın. Derlemeden sonra node CLI aracılığıyla her iki biçimi de sınayın. Tekil durum kullanan iki biçimli paket tehlikesine karşı dikkatli olun.
Sıkça Sorulan Sorular
“ESM ve CJS Çift Paket Çıktısı” dersi ücretsiz mi?
Evet — “ESM ve CJS Çift Paket Çıktısı” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve React Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. React Academy kursu toplamda 4 dersten oluşur.
“ESM ve CJS Çift Paket Çıktısı” dersinde ne öğreneceğim?
Doğru package.json dışa aktarma alanı yapılandırmasıyla hem ES modülü hem de CommonJS derlemeleri oluşturun React Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
React Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te React Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“ESM ve CJS Çift Paket Çıktısı” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu React Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her React Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Kitaplıklar için Rollup ve tsup ile Paketleme
- ESM ve CJS Çift Paket Çıktısı
- Eş Düzey Bağımlılıklar ve Ağaç Sarsma
- npm'ye Yayınlama ve Anlamsal Sürümleme