BabelJS - Hızlı Kılavuz

BabelJSyeni özellikleri eski standartlara aktaran bir JavaScript aktarıcısıdır. Bununla, özellikler hem eski hem de yeni tarayıcılarda sorunsuz bir şekilde çalıştırılabilir. Avustralyalı bir geliştirici olan Sebastian McKenzie, BabelJS'yi kurdu.

Neden BabelJS?

JavaScript, tarayıcının anladığı dildir. Uygulamalarımızı çalıştırmak için farklı tarayıcılar kullanıyoruz - Chrome, Firefox, Internet Explorer, Microsoft Edge, Opera, UC tarayıcısı vb. ECMA Script, JavaScript dil spesifikasyonudur; ECMA Script 2015 ES6, tüm yeni ve eski tarayıcılarda iyi çalışan kararlı bir sürümdür.

ES5'ten sonra ES6, ES7 ve ES8'e sahibiz. ES6, tüm tarayıcılar tarafından tam olarak desteklenmeyen birçok yeni özellikle piyasaya sürüldü. Aynısı ES7, ES8 ve ESNext (ECMA Script'in sonraki sürümü) için de geçerlidir. Tüm tarayıcıların yayımlanan tüm ES sürümleriyle uyumlu olmasının ne zaman mümkün olacağı artık belirsiz.

Kodumuzu yazmak için ES6 veya ES7 veya ES8 özelliklerini kullanmayı planladığımızda, yeni değişikliklerin desteklenmemesi nedeniyle bazı eski tarayıcılarda kırılma eğiliminde olacaktır. Bu nedenle, ECMA Script'in yeni özelliklerini kodumuzda kullanmak istiyorsak ve mevcut tüm olası tarayıcılarda çalıştırmak istiyorsak, son kodumuzu ES5'te derleyecek bir araca ihtiyacımız var.

Babelaynı şeyi yapar ve buna, istediğimiz ECMA Script sürümünde kodu aktaran bir aktarıcı denir. Kodumuzu aktarmamız için ihtiyaç duyduğumuz ECMA sürümünü yapılandıran ön ayarlar ve eklentiler gibi özelliklere sahiptir. Babel ile geliştiriciler, JavaScript'teki yeni özellikleri kullanarak kodlarını yazabilirler. Kullanıcılar Babel ile çevrilen kodları alabilirler; kodlar daha sonra herhangi bir tarayıcıda sorunsuz olarak kullanılabilir.

The following table lists down the features available in ES6, ES7 and ES8 −

Özellikleri ECMA Script sürümü
Let + Const ES6
Ok İşlevleri ES6
Sınıflar ES6
Sözler ES6
Jeneratörler ES6
Yineleyiciler ES6
Modüller ES6
Şeklini bozma ES6
Şablon Değişmezleri ES6
Geliştirilmiş Nesne ES6
Varsayılan, Dinlenme ve Yayılma Özellikleri ES6
Zaman uyumsuz - Bekle ES7
Üs Alma Operatörü ES7
Array.prototype.includes () ES7
Dize Dolgusu ES8

BabelJS aşağıdaki iki bölümü yönetir -

  • transpiling
  • polyfilling

Babel-Transpiler nedir?

Babel-transpiler, modern JavaScript sözdizimini eski tarayıcılar tarafından kolayca anlaşılabilecek bir biçime dönüştürür. Örneğin, ok işlevi, const, let sınıfları işleve, var vb. Dönüştürülür. Burada sözdizimi, yani ok işlevi, her iki durumda da işlevselliği aynı tutarak normal bir işleve dönüştürülür.

Babel-polyfill nedir?

JavaScript'e sözler, haritalar ve içerikler gibi eklenen yeni özellikler var. Özellikler dizi üzerinde kullanılabilir; aynı, babel kullanılarak kullanıldığında ve aktarıldığında dönüştürülmeyecektir. Yeni özelliğin bir yöntem veya nesne olması durumunda, eski tarayıcılarda çalışmasını sağlamak için Babel-polyfill'i transpiling ile birlikte kullanmamız gerekir.

JavaScript'te bulunan, kopyalanabilen ve çoklu doldurulabilen ECMA Komut Dosyası özelliklerinin listesi burada verilmiştir -

  • Classes
  • Decorators
  • Const
  • Modules
  • Destructing
  • Varsayılan parametreler
  • Hesaplanan mülk adları
  • Nesne durması / yayılması
  • Zaman uyumsuz işlevler
  • Ok fonksiyonları
  • Dinlenme parametreleri
  • Spread
  • Şablon Değişmezleri

ECMA Script features that can be polyfilled −

  • Promises
  • Map
  • Set
  • Symbol
  • Weakmap
  • Weakset
  • includess
  • Array.from, Array.of, Array # find, Array.buffer, Array # findIndex
  • Object.assign,Object.entries,Object.values

BabelJS'nin Özellikleri

Bu bölümde BabelJS'nin farklı özelliklerini öğreneceğiz. BabelJS'nin en önemli temel özellikleri aşağıdadır -

Babel Eklentileri

Eklentiler ve Ön ayarlar, Babel'in kodu aktarması için yapılandırma ayrıntılarıdır. Babel, kodun yürütüleceği ortamı bilirsek, ayrı ayrı kullanılabilecek bir dizi eklentiyi destekler.

Babel-Ön Ayarlar

Babel ön ayarları bir dizi eklentidir, yani Babel'e belirli bir modda aktarım yapması için talimat veren babel aktarıcısına ayrıntıları yapılandırma. Kodun dönüştürülmesini istediğimiz ortama sahip ön ayarları kullanmalıyız. Örneğin, es2015 ön ayarı kodu es5'e dönüştürür .

Babel-Polyfills

Yöntemler ve nesneler gibi aktarılamayan bazı özellikler vardır. Bu tür durumlarda, özelliklerin herhangi bir tarayıcıda kullanımını kolaylaştırmak için babel-polyfill'i kullanabiliriz. Sözler örneğini ele alalım; özelliğin eski tarayıcılarda çalışması için polyfill'leri kullanmamız gerekiyor.

Babel-Polyfills

Babel-cli, kodun komut satırında kolayca derlenebileceği bir dizi komutla birlikte gelir. Ayrıca, kodun tek seferde aktarılmasını kolaylaştıran komutla birlikte kullanılacak eklentiler ve ön ayarlar gibi özelliklere de sahiptir.

BabelJS kullanmanın avantajları

Bu bölümde, BabelJS kullanımıyla ilişkili farklı avantajları öğreneceğiz -

  • BabelJS, JavaScript'e yeni eklenen tüm özelliklere geriye dönük uyumluluk sağlar ve herhangi bir tarayıcıda kullanılabilir.

  • BabelJS, JavaScript'in bir sonraki gelecek sürümünü (ES6, ES7, ESNext, vb.) Almak için transpile etme yeteneğine sahiptir.

  • BabelJS, gulp, webpack, flow, react, typcript, vb. İle birlikte kullanılabilir ve onu çok güçlü kılar ve geliştiricinin hayatını kolaylaştıran büyük projelerde kullanılabilir.

  • BabelJS ayrıca react JSX sözdizimi ile birlikte çalışır ve JSX biçiminde derlenebilir.

  • BabelJS, büyük projelerle çalışmayı kolaylaştıran eklentiler, çoklu dolgular, babel-cli desteğine sahiptir.

BabelJS kullanmanın dezavantajları

Bu bölümde, BabelJS kullanmanın farklı dezavantajlarını öğreneceğiz -

  • BabelJS kodu, aktarım sırasında sözdizimini değiştirir, bu da kodun üretimde yayınlandığında anlaşılmasını zorlaştırır.

  • Aktarılan kod, orijinal koda kıyasla daha büyüktür.

  • Tüm ES6 / 7/8 veya gelecek yeni özellikler aktarılamaz ve eski tarayıcılarda çalışması için polyfill kullanmalıyız.

İşte babeljs resmi sitesi https://babeljs.io/.

Bu bölümde, BabelJS için ortamın nasıl kurulacağını öğreneceğiz.

BabelJS ile çalışmak için aşağıdaki kuruluma ihtiyacımız var -

  • NodeJS
  • Npm
  • Babel-CLI
  • Babel-Preset
  • Kod yazmak için IDE

NodeJS

Nodejs'nin sisteminizde kurulu olup olmadığını kontrol etmek için yazın node –vterminalde. Bu, sisteminizde şu anda yüklü olan nodejs sürümünü görmenize yardımcı olacaktır.

Herhangi bir şey yazdırmazsa, sisteminize nodejs yükleyin. Nodejs yüklemek için ana sayfaya gidinhttps://nodejs.org/en/download/ nodejs ve işletim sisteminize göre paketi yükleyin.

Aşağıdaki ekran görüntüsü nodejs indirme sayfasını gösterir -

İşletim sisteminize bağlı olarak gerekli paketi kurun. Nodejs kurulduktan sonra, npm de onunla birlikte yüklenecektir. Npm'nin kurulu olup olmadığını kontrol etmek için yazınnpm –vterminalde. Npm'nin sürümünü görüntülemelidir.

Babel, kodu derlemek için kullanılabilecek yerleşik bir komut satırı arayüzü ile birlikte gelir.

Çalışacağınız bir dizin oluşturun. Burada babelproject adlı bir dizin oluşturduk . Proje detaylarını oluşturmak için nodej'lerden yararlanalım.

Aşağıda gösterildiği gibi projeyi oluşturmak için npm init kullandık -

İşte oluşturduğumuz proje yapısı.

Şimdi Babel ile çalışmak için aşağıda gösterildiği gibi Babel cli, Babel ön ayarı, Babel çekirdeği kurmamız gerekiyor -

babel-cli

Babel-cli'yi kurmak için aşağıdaki komutu yürütün -

npm install --save-dev babel-cli

babel önceden ayarlanmış

Babel-preset'i kurmak için aşağıdaki komutu yürütün -

npm install --save-dev babel-preset-env

babel çekirdekli

Babel-core'u kurmak için aşağıdaki komutu yürütün -

npm install --save-dev babel-core

Kurulumdan sonra, package.json'da mevcut olan ayrıntılar -

Projeye yerel olarak babel eklentileri yükledik. Bu, babel'i proje gereksinimlerine göre projelerimizde ve ayrıca babeljs'in farklı versiyonlarında farklı kullanabilmemiz için yapılır. Package.json, kullanılan babelj'lerin sürüm ayrıntılarını verir.

Babel'i projemizde kullanabilmek için package.json'da aynısını aşağıdaki gibi belirtmemiz gerekiyor -

Babel, esas olarak geriye dönük uyumluluğa sahip olan JavaScript kodunu derlemek için kullanılır. Şimdi, kodumuzu ES6 -> ES5 veya ES7 -> ES5'e ayrıca ES7-> ES6, vb.

Babel'e aynı talimatları vermek için, yürütme sırasında, kök klasörde .babelrc adlı bir dosya oluşturmamız gerekir. Aşağıda gösterildiği gibi ön ayarların ayrıntılarını içeren bir json nesnesi içerir -

JavaScript dosyası index.js'yi oluşturup Babel kullanarak es2015'e derleyeceğiz. Bundan önce, es2015 ön ayarını aşağıdaki gibi yüklememiz gerekir -

İndex.js'de es6'ya eklenen yeni bir özellik olan ok fonksiyonunu kullanarak bir fonksiyon oluşturduk. Babel'i kullanarak kodu es5'e derleyeceğiz.

Es2015'i çalıştırmak için aşağıdaki komut kullanılır -

npx babel index.js

Çıktı

Index.js kodunu yukarıda gösterildiği gibi es5'te görüntüler.

Aşağıdaki komutu çalıştırarak çıktıyı dosyada saklayabiliriz -

npx babel index.js --out-file index_es5.js

Çıktı

İşte oluşturduğumuz dosya, index_es5.js -

BabelJSJavaScript'e eklenen yeni özellikleri ES5'e dönüştüren veya verilen ön ayar veya eklentiye göre tepki veren bir JavaScript aktarıcısıdır. ES5, JavaScript'in en eski formlarından biridir ve yeni ve eski tarayıcılarda herhangi bir sorun olmadan çalışması desteklenir. Bu eğitimdeki örneklerin çoğunda, kodu ES5'e aktardık.

ES6, ES7 ve ES8'e eklenen ok fonksiyonları, sınıflar, vaatler, jeneratörler, asenkron fonksiyonlar gibi birçok özellik gördük. Yeni eklenen özelliklerden herhangi biri eski tarayıcılarda kullanıldığında, hata atar. BabelJS, eski tarayıcılarla geriye dönük uyumlu olan kodu derlemeye yardımcı olur. ES5'in eski tarayıcılarda sorunsuz çalıştığını gördük. Dolayısıyla, proje ortamı detaylarını göz önünde bulundurarak, eski tarayıcılarda çalışması gerekiyorsa, projemizdeki herhangi bir yeni özelliği kullanabilir ve babeljs kullanarak kodu ES5'e derleyebilir ve herhangi bir sorun olmadan herhangi bir tarayıcıda kullanabiliriz.

Bunu anlamak için aşağıdaki örneği ele alalım.

Misal

<!DOCTYPE html>
<html>
   <head>
      <title>BabelJs Testing</title>
   </head>
   <body>
      <script type="text/javascript" src="index.js"></script>
   </body>
</html>

index.js dosyası

var _foo = () => {
   return "Hello World"
};

alert(_foo());

Çıktı

Yukarıdaki html'yi Chrome tarayıcısında çalıştırdığımızda, aşağıdaki çıktıyı alıyoruz -

HTML Firefox'ta çalıştırıldığında, aşağıdaki çıktıyı üretir -

Ve aynı HTML Internet Explorer'da çalıştırıldığında, aşağıdaki sözdizimi hatasını oluşturur -

ES6 Arrow işlevini kullandık; aynısı yukarıda görüldüğü gibi tüm tarayıcılarda çalışmaz. Bunu çalıştırmak için, kodu ES5'e derlemek ve tüm tarayıcılarda kullanmak için BabelJS'ye sahibiz.

Babeljs kullanarak js dosyasını es5'e derleyecek ve tarayıcılarda tekrar kontrol edecektir.

Html dosyasında, aşağıda gösterildiği gibi index_new.js'yi kullanacağız -

<!DOCTYPE html>
<html>
   <head>
      <title>BabelJs Testing</title>
   </head>
   <body>
      <script type="text/javascript" src="index_new.js"></script>
   </body>
</html>

index_new.js

"use strict";

var _foo = function _foo() {
   return "Hello World";
};

alert(_foo());

Chrome Çıkışı

Firefox Tarayıcı Çıkışı

IE Tarayıcı Çıkışı

Bu bölümde babelj'leri projemizde nasıl kullanacağımızı göreceğiz. Nodejs kullanarak bir proje oluşturacağız ve projemizi test etmek için http local server kullanacağız.

Proje Kurulumu Oluştur

Bu bölümde, proje kurulumunun nasıl oluşturulacağını öğreneceğiz.

Yeni bir dizin oluşturun ve projeyi oluşturmak için aşağıdaki komutu çalıştırın -

npm init

Çıktı

Yürütme üzerine, yukarıdaki komut aşağıdaki çıktıyı üretir -

Oluşturulan package.json aşağıdadır -

Babeljs ile çalışmaya başlamak için gerekli paketleri kuracağız. Babel-cli, babel-core, babel-preset-es2015'i kurmak için aşağıdaki komutu uygulayacağız .

npm install babel-cli babel-core babel-preset-es2015 --save-dev

Çıktı

Yürütme üzerine, yukarıdaki komut aşağıdaki çıktıyı üretir -

Package.json aşağıdaki gibi güncellenir -

Js dosyasını test etmek için http sunucusuna ihtiyacımız var. Http sunucusunu kurmak için aşağıdaki komutu yürütün -

npm install lite-server --save-dev

Package.json'a aşağıdaki ayrıntıları ekledik -

Komut olarak, Babel gelen scripts.js transpiling ilgilenir src klasörüne ve bunu kaydeder dev ismi ile klasöre scripts.bundle.js . Package.json'da istediğimiz kodu derlemek için tam komutu ekledik. Ek olarak, değişiklikleri test etmek için lite sunucuyu başlatacak yapı eklenir .

Src / scripts.js aşağıdaki gibi JavaScript'e sahiptir -

class Student {
   constructor(fname, lname, age, address) {
      this.fname = fname;
      this.lname = lname;
      this.age = age;
      this.address = address;
   }

   get fullname() {
      return this.fname +"-"+this.lname;
   }
}

İndex.html'de aktarılan betiği şu şekilde adlandırdık -

<html>
   lt;head></head>
   <body>
      <script type="text/javascript" src="dev/scripts.bundle.js?a=11"></script>
      <h1 id="displayname"></h1>
      <script type="text/javascript">
         var a = new Student("Siya", "Kapoor", "15", "Mumbai");
         var studentdet = a.fullname;
         document.getElementById("displayname").innerHTML = studentdet;
      </script>
   </body>
</html>

Babel'i çağırıp kodu derleyecek aşağıdaki komutu çalıştırmamız gerekiyor. Komut, package.json'dan Babel'i çağıracaktır -

npm run babel

Scripts.bundle.js, dev klasöründe oluşturulan yeni js dosyasıdır -

Çıktısı dev/scripts.bundle.js aşağıdaki gibidir -

"use strict";

var _createClass = function () {
   function defineProperties(target, props) {
      for (var i = 0; i < props.length; i++) {
         var descriptor = props[i];
         descriptor.enumerable = descriptor.enumerable || false;
         descriptor.configurable = true;
         if ("value" in descriptor) descriptor.writable = true;
         Object.defineProperty(target, descriptor.key, descriptor); 
      }
   }
   return function (Constructor, protoProps, staticProps) {
      if (protoProps) defineProperties(Constructor.prototype, protoProps);
      if (staticProps) defineProperties(Constructor, staticProps);
      return Constructor; 
   };
}();

function _classCallCheck(instance, Constructor) { 
   if (!(instance instanceof Constructor)) {
      throw new TypeError("Cannot call a class as a function");
   }
}

var Student = function () {
   function Student(fname, lname, age, address) {
      _classCallCheck(this, Student);

      this.fname = fname;
      this.lname = lname;
      this.age = age;
      this.address = address;
   }

   _createClass(Student, [{
      key: "fullname",
      get: function get() {
         return this.fname + "-" + this.lname;
      }
   }]);

   return Student;
}();

Şimdi sunucuyu başlatmak için aşağıdaki komutu çalıştıralım -

npm run build

Komut çalıştığında, url'yi tarayıcıda açacaktır -

Çıktı

Yukarıdaki komut aşağıdaki çıktıyı üretir -

Babel 7'nin en son sürümü, halihazırda var olan paketlerde yapılan değişikliklerle birlikte yayınlandı. Kurulum kısmı Babel 6 için olduğu gibi aynı kalır. Babel 7'deki tek fark, tüm paketlerin@babel/, örneğin @ babel / core, @ babel / preset-env, @ babel / cli, @ babel / polyfill, vb.

İşte babel 7 kullanılarak oluşturulmuş bir proje kurulumu.

Komut

Proje kurulumunu başlatmak için aşağıdaki komutu yürütün -

npm init

Aşağıdaki paketleri kurun

npm install --save-dev @babel/core
npm install --save-dev @babel/cli
npm install --save-dev @babel/preset-env

İşte oluşturulmuş package.json -

Şimdi bir .babelrc kök klasördeki dosya -

Bir klasör oluşturun src/ ve dosya ekle main.js ona ve es5'e transpile için kodunuzu yazın.

src / main.js

let add = (a,b) => {
   return a+b;
}

transpile komutu

npx babel src/main.js --out-file main_es5.js

main_es5.js

"use strict";

var add = function add(a, b) {
   return a + b;
};

Babel 7'nin çalışması Babel 6 ile aynı kalıyor. Tek fark @babel ile pacakge kurulumu.

Babel 7'de kullanımdan kaldırılan bazı ön ayarlar vardır. Liste aşağıdaki gibidir -

  • ES20xx ön ayarları
  • babel-preset-env
  • babel-preset-latest
  • Babel'de sahne ön ayarları

Ayrıca paketlerden yıl çıkarılır - @babel/plugin-transform-es2015-classes şimdi @babel/plugin-transform-classes

Typecript ile çalışmanın bir örneğini daha göreceğiz ve bunu typcript ön ayarı ve babel 7 kullanarak Es2015 JavaScript'e aktaracağız.

Typecript ile çalışmak için, aşağıdaki gibi kurulacak typescript paketine ihtiyacımız var -

npm install --save-dev @babel/preset-typescript

Oluşturmak test.ts dosyadaki src/ klasörünü açın ve kodu typcript biçiminde yazın -

test.ts

let getName = (person: string) => {
   return "Hello, " + person;
}

getName("Siya");

.babelrc

komut

npx babel src/test.ts --out-file test.js

test.js

"use strict";

var getName = function getName(person) {
   return "Hello, " + person;
};

getName("Siya");

Bu bölümde ES6'ya eklenen özellikleri göreceğiz. BabelJS kullanarak özellikleri ES5'e nasıl derleyeceğimizi de öğreneceğiz.

Bu bölümde tartışacağımız çeşitli ES6 özellikleri aşağıdadır -

  • Let + Const
  • Ok İşlevleri
  • Classes
  • Promises
  • Generators
  • Destructuring
  • Iterators
  • Şablon Literalst
  • Geliştirilmiş Nesne
  • Varsayılan, Dinlenme ve Yayılma Özellikleri

Let + Const

JavaScript'te bir blok kapsamı yerel değişkeni bildirelim. Let'in kullanımını anlamak için aşağıdaki örneği düşünün.

Misal

let a = 1;
if (a == 1) {
   let a = 2;
   console.log(a);
}
console.log(a);

Çıktı

2
1

İlk konsolun 2'yi yazdırmasının nedeni a kullanılarak tekrar ilan edildi let ve yalnızca ifblok. Let kullanılarak bildirilen herhangi bir değişken sadece bildirilen blok içinde kullanılabilir. A değişkenini let'i kullanarak iki kez tanımladık, ancak bu, a'nın değerinin üzerine yazmıyor.

Bu, var ve let anahtar sözcükleri arasındaki farktır. Var kullanarak değişkeni bildirdiğinizde, değişken işlev kapsamında kullanılabilir olacak veya bildirilmişse bir küresel değişken gibi davranacaktır.

Let ile bir değişken bildirildiğinde, değişken blok kapsamı içinde kullanılabilir. İf ifadesinin içinde bildirilirse, yalnızca if bloğu içinde kullanılabilir olacaktır. Aynısı geçiş, döngü vb. İçin de geçerlidir.

Şimdi babeljs kullanarak ES5'teki kod dönüşümünü göreceğiz.

Kodu dönüştürmek için aşağıdaki komutu çalıştıralım -

npx babel let.js --out-file let_es5.js

Let anahtar kelimesi için es6'dan es5'e çıktı aşağıdaki gibidir -

ES6 kullanalım

let a = 1;
if (a == 1) {
   let a = 2;
   console.log(a);
}
console.log(a);

Babel kullanılarak ES5'e aktarıldı

"use strict";

var a = 1;
if (a == 1) {
   var _a = 2;
   console.log(_a);
}
console.log(a);

ES5 kodunu görürseniz, let anahtar kelimesi ile değiştirilir. varanahtar kelime. Ayrıca if bloğunun içindeki değişken olarak yeniden adlandırılır_a ile bildirildiği zamankiyle aynı etkiye sahip olmak let anahtar kelime.

Const

Bu bölümde, const anahtar kelimesinin ES6 ve ES5'te nasıl çalıştığını öğreneceğiz. Const anahtar sözcüğü kapsam içinde de mevcuttur; ve dışarıdaysa, bir hata atar. Sabit beyan edilen değişkenin değeri atandıktan sonra değiştirilemez. Const anahtar kelimesinin nasıl kullanıldığını anlamak için aşağıdaki örneği ele alalım.

Misal

let a =1;
if (a == 1) {
   const age = 10;
}
console.log(age);

Çıktı

Uncaught ReferenceError: age is not defined at 
      
       :5:13 
      

Sabit yaş if bloğu içinde tanımlandığı ve if bloğu içinde mevcut olduğu için yukarıdaki çıktı bir hata atar.

BabelJS kullanarak ES5'e dönüştürmeyi anlayacağız.

ES6

let a =1;
if (a == 1) {
   const age = 10;
}
console.log(age);

Komut

npx babel const.js --out-file const_es5.js

BabelJS Kullanılarak ES6'ya Aktarıldı

"use strict";

var a = 1;
if (a == 1) {
   var _age = 10;
}
console.log(age);

ES5 durumunda, const anahtar sözcüğü yukarıda gösterildiği gibi var anahtar sözcüğü ile değiştirilir.

Ok İşlevleri

Bir Arrow işlevi, değişken ifadeye kıyasla daha kısa bir sözdizimine sahiptir. yağ ok işlevi veya lambda işlevi olarak da adlandırılır. Fonksiyonun kendine ait bu özelliği yoktur. Bu işlevde, anahtar sözcük işlevi atlanmıştır.

Misal

var add = (x,y) => {
   return x+y;
}

var k = add(3,6);
console.log(k);

Çıktı

9

BabelJS'yi kullanarak yukarıdaki kodu ES5'e aktaracağız.

ES6 - Ok işlevi

var add = (x,y) => {
   return x+y;
}

var k = add(3,6);
console.log(k);

Komut

npx babel arrowfunction.js --out-file arrowfunction_es5.js

BabelJS - ES5

Babel kullanıldığında, ok işlevi aşağıda gösterildiği gibi değişken ifade işlevine dönüştürülür.

"use strict";

var add = function add(x, y) {
   return x + y;
};

var k = add(3, 6);
console.log(k);

Sınıflar

ES6, yeni Sınıflar özelliğiyle birlikte gelir. Sınıflar, ES5'te bulunan prototip tabanlı kalıtıma benzer. Class anahtar sözcüğü, sınıfı tanımlamak için kullanılır. Sınıflar özel işlevler gibidir ve işlev ifadesi gibi benzerliklere sahiptir. Sınıf içinde çağrılan bir kurucuya sahiptir.

Misal

class Person {
   constructor(fname, lname, age, address) {
      this.fname = fname;
      this.lname = lname;
      this.age = age;
      this.address = address;
   }

   get fullname() {
      return this.fname +"-"+this.lname;
   }
}
var a = new Person("Siya", "Kapoor", "15", "Mumbai");
var persondet = a.fullname;

Çıktı

Siya-Kapoor

ES6 - Sınıflar

class Person {
   constructor(fname, lname, age, address) {
      this.fname = fname;
      this.lname = lname;
      this.age = age;
      this.address = address;
   }

   get fullname() {
      return this.fname +"-"+this.lname;
   }
}
var a = new Person("Siya", "Kapoor", "15", "Mumbai");
var persondet = a.fullname;

Komut

npx babel class.js --out-file class_es5.js

BabelJS - ES5

ES5'te olduğu gibi sınıflar için çalışan işlevselliği elde etmek için babeljs kullanılarak eklenen fazladan kod vardır. BabelJs, işlevselliğin ES6'da olduğu gibi çalışmasını sağlar.

"use strict";

var _createClass = function () {
   function defineProperties(target, props) {
      for (var i = 0; i < props.length; i++) {
         var descriptor = props[i];
         descriptor.enumerable = descriptor.enumerable || false;
         descriptor.configurable = true;
         if ("value" in descriptor) descriptor.writable = true;
         Object.defineProperty(target, descriptor.key, descriptor);
      }
   }
   return function (Constructor, protoProps, staticProps) {
      if (protoProps) defineProperties(Constructor.prototype, protoProps);
      if (staticProps) defineProperties(Constructor, staticProps);
      return Constructor;
   };
}();

function _classCallCheck(instance, Constructor) {
   if (!(instance instanceof Constructor)) {
      throw new TypeError("Cannot call a class as a function");
   }
}

var Person = function () {
   function Person(fname, lname, age, address) {
      _classCallCheck(this, Person);

      this.fname = fname;
      this.lname = lname;
      this.age = age;
      this.address = address;
   }

   _createClass(Person, [{
      key: "fullname",
      get: function get() {
         return this.fname + "-" + this.lname;
      }
   }]);

   return Person;
}();

var a = new Person("Siya", "Kapoor", "15", "Mumbai");
var persondet = a.fullname;

Sözler

JavaScript vaatleri, kodunuzdaki eşzamansız istekleri yönetmek için kullanılır.

Bağımlılığı olan eşzamansız isteklerden gelen birden çok geri aramayı yönetirken hayatı kolaylaştırır ve kodu temiz tutar. Sözler, geri arama işlevleriyle çalışmanın daha iyi bir yolunu sağlar. Sözler ES6'nın bir parçasıdır. Varsayılan olarak, bir söz oluşturduğunuzda sözün durumu beklemededir.

Sözler üç eyalette gelir -

  • beklemede (başlangıç ​​durumu)
  • çözüldü (başarıyla tamamlandı)
  • rejected(failed)

new Promise()bir söz oluşturmak için kullanılır. Promise yapıcısının bir geri arama işlevi olan bir bağımsız değişkeni vardır. Geri arama işlevinin iki bağımsız değişkeni vardır - çöz ve reddet;

bunların ikisi de dahili işlevlerdir. Yazdığınız asenkron kod, yani Ajax çağrısı, resim yükleme, zamanlama fonksiyonları geri arama fonksiyonunda yer alacaktır.

Geri arama işlevinde gerçekleştirilen görev başarılıysa, çözümleme işlevi çağrılır; aksi takdirde, reddetme işlevi hata ayrıntılarıyla çağrılır.

Aşağıdaki kod satırı bir taahhüt yapısı çağrısını gösterir -

var _promise = new Promise (function(resolve, reject) {
   var success = true;
   if (success) {
      resolve("success");
   } else {
      reject("failure");
   }
});
_promise.then(function(value) {
   //once function resolve gets called it comes over here with the value passed in resolve
   console.log(value); //success
}).catch(function(value) {
   //once function reject gets called it comes over here with the value passed in reject
   console.log(value); // failure.
});

ES6 Söz Örneği

let timingpromise = new Promise((resolve, reject) => {
   setTimeout(function() {
      resolve("Promise is resolved!");
   }, 1000);
});

timingpromise.then((msg) => {
   console.log(msg);
});

Çıktı

Promise is resolved!

ES6 - Sözler

let timingpromise = new Promise((resolve, reject) => {
   setTimeout(function() {
      resolve("Promise is resolved!");
   }, 1000);
});

timingpromise.then((msg) => {
   console.log(msg);
});

Komut

npx babel promise.js --out-file promise_es5.js

BabelJS - ES5

"use strict";

var timingpromise = new Promise(function (resolve, reject) {
   setTimeout(function () {
      resolve("Promise is resolved!");
   }, 1000);
});

timingpromise.then(function (msg) {
   console.log(msg);
});

Sözler için, kod aktarıldığında değişmez. Daha eski tarayıcılarda çalışabilmesi için babel-polyfill kullanmamız gerekiyor. Babel-polyfill ile ilgili detaylar babel - poyfill bölümünde açıklanmıştır.

Jeneratörler

Jeneratör işlevi normal gibidir function. Fonksiyon işlev ve * ile özel bir sözdizimi fonksiyon * sahiptir verim işlevi içinde kullanılacak anahtar kelime. Bu, gerektiğinde işlevi duraklatmak veya başlatmak içindir. Yürütme başladığında normal işlevler arasında durdurulamaz. Return ifadesiyle karşılaştığında ya tam işlevi çalıştıracak ya da duracaktır. Generator burada farklı bir şekilde çalışır, verim anahtar kelimesi ile fonksiyonu durdurabilir ve gerektiğinde jeneratörü tekrar arayarak çalıştırabilirsiniz.

Misal

function* generatorfunction(a) {
   yield a;
   yield a +1 ;
}

let g = generatorfunction(8);
console.log(g.next());
console.log(g.next());

Çıktı

{value: 8, done: false}
{value: 9, done: false}

ES6 - Jeneratör

function* generatorfunction(a) {
   yield a;
   yield a +1 ;
}

let g = generatorfunction(8);
console.log(g.next());
console.log(g.next());

Komut

npx babel generator.js --out-file generator_es5.js

BabelJS - ES5

"use strict";

var _marked = /*#__PURE__*/regeneratorRuntime.mark(generatorfunction);

function generatorfunction(a) {
   return regeneratorRuntime.wrap(function generatorfunction$(_context) {
      while (1) {
         switch (_context.prev = _context.next) {
            case 0:
               _context.next = 2;
               return a;

            case 2:
               _context.next = 4;
               return a + 1;
               
            case 4:
            case "end":
               return _context.stop();
         }
      }
   }, _marked, this);
}

var g = generatorfunction(8);
console.log(g.next());
console.log(g.next());

Yineleyiciler

JavaScript'teki yineleyici, değeri olan bir JavaScript nesnesini geri verir. Nesnede ayrıca, true / false değerine sahip olan done adında bir bayrak vardır. Yineleyicinin sonu değilse yanlış verir. Bir örnek düşünelim ve yineleyicinin bir dizi üzerinde çalışmasını görelim.

Misal

let numbers = [4, 7, 3, 10];
let a = numbers[Symbol.iterator]();
console.log(a.next());
console.log(a.next());
console.log(a.next());
console.log(a.next());
console.log(a.next());

Yukarıdaki örnekte, bir sayı dizisi kullandık ve dizide bir işlevi kullanarak Symbol.iterator dizin olarak.

Dizide next () kullanarak elde ettiğimiz çıktı aşağıdaki gibidir -

{value: 4, done: false}
{value: 7, done: false}
{value: 3, done: false}
{value: 10, done: false}
{value: undefined, done: true}

Çıktı, değerli bir nesne verir ve özellik olarak yapılır. Hernext()yöntem çağrısı, diziden sonraki değeri verir ve yanlış olarak yapılır. Done değeri yalnızca dizideki öğeler tamamlandığında doğru olacaktır. Bunu diziler üzerinde yinelemek için kullanabiliriz. Gibi daha fazla seçenek varfor-of aşağıdaki gibi kullanılan döngü -

Misal

let numbers = [4, 7, 3, 10];
for (let n of numbers) {
   console.log(n);
}

Çıktı

4
7
3
10

Ne zaman for-of loopanahtarı kullanır, yukarıda gösterildiği gibi dizi değerlerinin ayrıntılarını verir. Her iki kombinasyonu da kontrol edeceğiz ve babeljs'in bunları nasıl es5'e aktardığını göreceğiz.

Misal

let numbers = [4, 7, 3, 10];
let a = numbers[Symbol.iterator]();
console.log(a.next());
console.log(a.next());
console.log(a.next());
console.log(a.next());
console.log(a.next());

let _array = [4, 7, 3, 10];
for (let n of _array) {
   console.log(n);
}

komut

npx babel iterator.js --out-file iterator_es5.js

Çıktı

"use strict";

var numbers = [4, 7, 3, 10];
var a = numbers[Symbol.iterator]();
console.log(a.next());
console.log(a.next());
console.log(a.next());
console.log(a.next());
console.log(a.next());

var _array = [4, 7, 3, 10];
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;

try {
   for (var _iterator = _array[Symbol.iterator](),
      _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done);
      _iteratorNormalCompletion = true) {
      var n = _step.value;

      console.log(n);
   }
} catch (err) {
   _didIteratorError = true;
   _iteratorError = err;
} finally {
   try {
      if (!_iteratorNormalCompletion && _iterator.return) {
         _iterator.return();
      }
   } finally {
      if (_didIteratorError) {
         throw _iteratorError;
      }
   }
}

Eklenen değişiklikler var for-ofes5 içinde döngü. Ancak iterator.next olduğu gibi bırakılır. Kullanmalıyızbabel-polyfilleski tarayıcılarda çalışmasını sağlamak için. Babel-polyfill, babel ile birlikte kurulur ve aynısı aşağıda gösterildiği gibi node_modules'den de kullanılabilir -

Misal

<html>
   <head>
      <script type="text/javascript" src="node_modules/babel-polyfill/dist/polyfill.min.js"></script>
      <script type="text/javascript" src="iterator_es5.js"></script>
   </head>
   <body>
      <h1>Iterators</h1>
   </body>
</html>

Çıktı

Şeklini bozma

Destructuring özelliği, dizilerden, nesnelerden değerleri ayıran bir JavaScript ifadesi gibi davranır.

Aşağıdaki örnek, yok etme sözdiziminin işleyişini açıklayacaktır.

Misal

let x, y, rem;
[x, y] = [10, 20];

console.log(x);
console.log(y);
[x, y, ...rem] = [10, 20, 30, 40, 50];
console.log(rem);

let z = 0;
({ x, y } = (z) ? { x: 10, y: 20 } : { x: 1, y: 2 });
console.log(x);
console.log(y);

Çıktı

10
20
[30, 40, 50]
1
2

Yukarıdaki kod satırı, değerlerin dizinin sağ tarafından sol taraftaki değişkenlere nasıl atandığını gösterir. Değişken...rem diziden kalan tüm değerleri alır.

Aşağıda gösterildiği gibi koşullu operatörü kullanarak sol taraftaki nesneden değerleri de atayabiliriz -

({ x, y } = (z) ? { x: 10, y: 20 } : { x: 1, y: 2 });
console.log(x); // 1
console.log(y); // 2

Babeljs kullanarak aynısını ES5'e çevirelim -

komut

npx babel destructm.js --out-file destruct_es5.js

destroyt_es5.js

"use strict";

var x = void 0,
   y = void 0,
   rem = void 0;
x = 10;
y = 20;

console.log(x);
console.log(y);
x = 10;
y = 20;
rem = [30, 40, 50];

console.log(rem);

var z = 0;

var _ref = z ? { x: 10, y: 20 } : { x: 1, y: 2 };

x = _ref.x;
y = _ref.y;

console.log(x);
console.log(y);

Şablon Değişmezleri

Şablon değişmezi, içindeki ifadelere izin veren bir dizedir. Tek veya çift tırnak yerine ters işaret (``) kullanır. Bir dizge içinde ifade dediğimizde, dizge içinde değişkenler kullanabilir, bir işlevi çağırabilir vb.

Misal

let a = 5;
let b = 10;
console.log(`Using Template literal : Value is ${a + b}.`);
console.log("Using normal way : Value is " + (a + b));

Çıktı

Using Template literal : Value is 15.
Using normal way : Value is 15

ES6 - Şablon Değişmez Değeri

let a = 5;
let b = 10;
console.log(`Using Template literal : Value is ${a + b}.`);
console.log("Using normal way : Value is " + (a + b));

komut

npx babel templateliteral.js --out-file templateliteral_es5.js

BabelJS - ES5

"use strict";

var a = 5;
var b = 10;
console.log("Using Template literal : Value is " + (a + b) + ".");

console.log("Using normal way : Value is " + (a + b));

Gelişmiş Nesne Değişmezleri

Es6'da, nesne değişmezlerine eklenen yeni özellikler çok iyi ve kullanışlıdır. ES5 ve ES6'da birkaç nesne değişmez örneğini inceleyeceğiz -

Misal

ES5
var red = 1, green = 2, blue = 3;
var rgbes5 = {
   red: red,
   green: green,
   blue: blue
};
console.log(rgbes5); // {red: 1, green: 2, blue: 3}

ES6
let rgbes6 = {
   red,
   green,
   blue
};
console.log(rgbes6); // {red: 1, green: 2, blue: 3}

Yukarıdaki kodu görürseniz, ES5 ve ES6'daki nesne farklıdır. ES6'da, değişken isimleri anahtarla aynıysa anahtar değerini belirtmemize gerek yoktur.

Babel kullanarak ES5'in derlemesini görelim.

ES6-Geliştirilmiş nesne değişmez değeri

const red = 1, green = 2, blue = 3;
let rgbes5 = {
   red: red,
   green: green,
   blue: blue
};
console.log(rgbes5);

let rgbes6 = {
   red,
   green,
   blue
};
console.log(rgbes6);

let brand = "carbrand";
const cars = {
   [brand]: "BMW"
}
console.log(cars.carbrand);  //"BMW"

komut

npx babel enhancedobjliteral.js --out-file enhancedobjliteral_es5.js

BabelJS - ES5

"use strict";

function _defineProperty(obj, key, value) {
   if (key in obj) {
      Object.defineProperty(obj, key, {
         value: value, enumerable: true, configurable: true, writable: true
      });
   } else { obj[key] = value; } return obj;
}

var red = 1,
   green = 2,
   blue = 3;
var rgbes5 = {
   red: red,
   green: green,
   blue: blue
};
console.log(rgbes5);

var rgbes6 = {
   red: red,
   green: green,
   blue: blue
};
console.log(rgbes6);

var brand = "carbrand";
var cars = _defineProperty({}, brand, "BMW");

console.log(cars.carbrand); //"BMW"

Varsayılan, Dinlenme ve Yayılma Özellikleri

Bu bölümde, varsayılan, dinlenme ve yayılma özelliklerini tartışacağız.

Varsayılan

ES6 ile, fonksiyon parametrelerine varsayılan parametreleri aşağıdaki gibi kullanabiliriz -

Misal

let add = (a, b = 3) => {
   return a + b;
}

console.log(add(10, 20));  // 30
console.log(add(10));      // 13

Babel kullanarak yukarıdaki kodu ES5'e aktaralım.

komut

npx babel default.js --out-file default_es5.js

BabelJS - ES5

"use strict";

var add = function add(a) {
   var b = arguments.length > 1 >> arguments[1] !== undefined ? arguments[1] : 3;
   return a + b;
};

console.log(add(10, 20));
console.log(add(10));

Dinlenme

Rest parametresi, aşağıdaki örnekte gösterildiği gibi üç noktayla (...) başlar -

Misal

let add = (...args) => {
   let sum = 0;
   args.forEach(function (n) {
      sum += n;
   });
   return sum;
};

console.log(add(1, 2));    // 3
console.log(add(1, 2, 5, 6, 6, 7));   //27

Yukarıdaki fonksiyonda, add fonksiyonuna n sayıda parametre aktarıyoruz. ES5'te olsaydı tüm bu parametreleri eklemek için, argümanların ayrıntılarını almak için arguments nesnesine güvenmemiz gerekir. ES6 ile,rest it yukarıda gösterildiği gibi argümanları üç noktayla tanımlamaya yardımcı olur ve içinden geçip sayıların toplamını alabiliriz.

Note - Üç nokta, yani rest kullanırken ek argümanlar kullanamayız.

Misal

let add = (...args, value) => {    //syntax error
   let sum = 0;
   args.forEach(function (n) {
      sum += n;
   });
   return sum;
};

Yukarıdaki kod, sözdizimi hatası verecektir.

Es5'in derlemesi aşağıdaki gibidir -

komut

npx babel rest.js --out-file rest_es5.js

Babel -ES5

"use strict";

var add = function add() {
   for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
      args[_key] = arguments[_key];
   }

   var sum = 0;
   args.forEach(function (n) {
      sum += n;
   });
   return sum;
};

console.log(add(1, 2));
console.log(add(1, 2, 5, 6, 6, 7));

Yaymak

Spread özelliği de rest gibi üç noktaya sahiptir. Aşağıda spread özelliğinin nasıl kullanılacağını gösteren çalışan bir örnek verilmiştir.

Misal

let add = (a, b, c) => {
   return a + b + c;
}
let arr = [11, 23, 3];
console.log(add(...arr));   //37

Şimdi yukarıdaki kodun babel kullanılarak nasıl aktarıldığını görelim -

komut

npx babel spread.js --out-file spread_es5.js

Babel-ES5

"use strict";

var add = function add(a, b, c) {
   return a + b + c;
};
var arr = [11, 23, 3];
console.log(add.apply(undefined, arr));

Vekiller

Proxy, özellik arama, atama, numaralandırma, işlev, çağırma vb. İşlemler için özel davranış tanımlayabileceğiniz bir nesnedir.

Sözdizimi

var a = new Proxy(target, handler);

Hem hedef hem de işleyici nesnelerdir.

  • hedef bir nesnedir veya başka bir proxy öğesi olabilir.

  • eylemci , işlev olarak özellikleri ile çağrıldığında davranış verecek bir nesne olacaktır.

Bir örnek yardımıyla bu özellikleri anlamaya çalışalım -

Misal

let handler = {
   get: function (target, name) {
      return name in target ? target[name] : "invalid key";
   }
};

let o = {
   name: 'Siya Kapoor',
   addr: 'Mumbai'
}

let a = new Proxy(o, handler);
console.log(a.name);
console.log(a.addr);
console.log(a.age);

Yukarıdaki örnekte hedef ve işleyiciyi tanımladık ve proxy ile kullandık. Proxy, nesneyi anahtar / değer çiftleriyle döndürür.

Çıktı

Siya Kapoor
Mumbai
invalid key

Şimdi yukarıdaki kodu babel kullanarak ES5'e nasıl aktaracağımızı görelim -

komut

npx babel proxy.js --out-file proxy_es5.js

Babel-ES5

'use strict';

var handler = {
   get: function get(target, name) {
      return name in target ? target[name] : "invalid key";
   }
};

var o = {
   name: 'Siya Kapoor',
   addr: 'Mumbai'
};

var a = new Proxy(o, handler);
console.log(a.name);
console.log(a.addr);
console.log(a.age);

Bu bölümde, Babel kullanarak ES6 modüllerinin ES5'e nasıl aktarılacağını göreceğiz.

Modüller

JavaScript kodunun parçalarının yeniden kullanılması gereken bir senaryo düşünün. ES6, Modüller konseptiyle sizi kurtarmaya geliyor.

Bir modulebir dosyaya yazılmış bir JavaScript kodundan başka bir şey değildir. Bir modüldeki işlevler veya değişkenler, modül dosyası bunları dışa aktarmadıkça kullanılamaz.

Daha basit bir ifadeyle, modüller, modülünüzdeki kodu yazmanıza ve kodun yalnızca kodunuzun diğer kısımları tarafından erişilmesi gereken kısımlarını açığa çıkarmanıza yardımcı olur.

Modülün nasıl kullanılacağını ve kodda kullanmak için nasıl dışa aktarılacağını anlamak için bir örnek ele alalım.

Misal

add.js

var add = (x,y) => {
   return x+y;
}

module.exports=add;

multiply.js

var multiply = (x,y) => {
   return x*y;
};

module.exports = multiply;

main.js

import add from './add';
import multiply from './multiply'

let a = add(10,20);
let b = multiply(40,10);

console.log("%c"+a,"font-size:30px;color:green;");
console.log("%c"+b,"font-size:30px;color:green;");

Verilen 2 sayıyı ekleyen üç dosya add.js var, verilen iki sayıyı çarpan multiply.js ve toplama ve çarpma çağıran ve çıktıyı konsolide eden main.js.

Vermek add.js ve multiply.js içinde main.js, önce aşağıda gösterildiği gibi ihraç etmeliyiz -

module.exports = add;
module.exports = multiply;

Onları kullanmak için main.js, bunları aşağıda gösterildiği gibi içe aktarmamız gerekiyor

import add from './add';
import multiply from './multiply'

Dosyaları tarayıcıda çalıştırabilmemiz için modül paketleyiciye ihtiyacımız var.

Bunu yapabiliriz -

  • Webpack'i kullanma
  • Gulp kullanma

ES6 modülleri ve Web paketi

Bu bölümde ES6 modüllerinin ne olduğunu göreceğiz. Ayrıca webpack'i nasıl kullanacağımızı da öğreneceğiz.

Başlamadan önce aşağıdaki paketleri yüklememiz gerekiyor -

npm install --save-dev webpack
npm install --save-dev webpack-dev-server
npm install --save-dev babel-core
npm install --save-dev babel-loader
npm install --save-dev babel-preset-env

Package.json

Npm kullanarak çalıştırmak için komut dosyalarına paket ve yayınlama görevleri ekledik. İşte son dosyayı oluşturacak webpack.config.js dosyası.

webpack.config.js

var path = require('path');

module.exports = {
   entry: {
      app: './src/main.js'
   },
   output: {
      path: path.resolve(__dirname, 'dev'),
      filename: 'main_bundle.js'
   },
   mode:'development',
   module: {
      rules: [
         {
            test: /\.js$/,
            include: path.resolve(__dirname, 'src'),
            loader: 'babel-loader',
            query: {
               presets: ['env']
            }
         }
      ]
   }
};

Dosyaları oluşturmak için npm run pack komutunu çalıştırın. Son dosya dev / klasöründe saklanacaktır.

komut

npm run pack

dev/main_bundle.jsortak dosya oluşturulur. Bu dosya add.js, multiply.js ve main.js'yi birleştirir vedev/main_bundle.js.

/******/ (function(modules) { // webpackBootstrap
/******/    // The module cache
/******/    var installedModules = {};
/******/
/******/    // The require function
/******/    function __webpack_require__(moduleId) {
/******/
/******/       // Check if module is in cache
/******/       if(installedModules[moduleId]) {
/******/          return installedModules[moduleId].exports;
/******/       }
/******/       // Create a new module (and put it into the cache)
/******/       var module = installedModules[moduleId] = {
/******/          i: moduleId,
/******/          l: false,
/******/          exports: {}
/******/       };
/******/
/******/       // Execute the module function
/******/       modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/       // Flag the module as loaded
/******/       module.l = true;
/******/
/******/       // Return the exports of the module
/******/       return module.exports;
/******/    }
/******/
/******/
/******/    // expose the modules object (__webpack_modules__)
/******/    __webpack_require__.m = modules;
/******/
/******/    // expose the module cache
/******/    __webpack_require__.c = installedModules;
/******/
/******/    // define getter function for harmony exports
/******/    __webpack_require__.d = function(exports, name, getter) {
/******/       if(!__webpack_require__.o(exports, name)) {
/******/          Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/       }
/******/    };
/******/
/******/    // define __esModule on exports
/******/    __webpack_require__.r = function(exports) {
/******/      if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/         Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/      }
/******/      Object.defineProperty(exports, '__esModule', { value: true });
/******/    };
/******/
/******/    // create a fake namespace object
/******/    // mode & 1: value is a module id, require it
/******/    // mode & 2: merge all properties of value into the ns
/******/    // mode & 4: return value when already ns object
/******/    // mode & 8|1: behave like require
/******/    __webpack_require__.t = function(value, mode) {
/******/       if(mode & 1) value = __webpack_require__(value);
/******/       if(mode & 8) return value;
/******/       if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/       var ns = Object.create(null);
/******/       __webpack_require__.r(ns);
/******/       Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/       if(mode & 2 && typeof value != 'string')
               for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/       return ns;
/******/    };
/******/
/******/    // getDefaultExport function for compatibility with non-harmony modules
/******/    __webpack_require__.n = function(module) {
/******/       var getter = module && module.__esModule ?
/******/       function getDefault() { return module['default']; } :
/******/       function getModuleExports() { return module; };
/******/       __webpack_require__.d(getter, 'a', getter);
/******/       return getter;
/******/    };
/******/
/******/    // Object.prototype.hasOwnProperty.call
/******/     __webpack_require__.o = function(object, property) {
               return Object.prototype.hasOwnProperty.call(object, property); 
            };
/******/
/******/    // __webpack_public_path__
/******/    __webpack_require__.p = "";
/******/
/******/
/******/    // Load entry module and return exports
/******/    return __webpack_require__(__webpack_require__.s = "./src/main.js");
/******/ })
/************************************************************************/
/******/ ({
/***/       "./src/add.js":
/*!********************!*\
!*** ./src/add.js ***!
\********************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
   "use strict";

   eval(
      "\n\nvar add = function add(x, y) {\n return x + y;\n};
      \n\nmodule.exports = add;
      \n\n//# sourceURL = webpack:///./src/add.js?"
   );
   /***/ }),
/***/ "./src/main.js":
/*!*********************!*\
!*** ./src/main.js ***!
\*********************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

      "use strict";
      eval(
         "\n\nvar _add = __webpack_require__(/*! ./add */ \"./src/add.js\");
         \n\nvar _add2 = _interopRequireDefault(_add);
         \n\nvar _multiply = __webpack_require__(/*! ./multiply */ \"./src/multiply.js\");
         \n\nvar _multiply2 = _interopRequireDefault(_multiply);
         \n\nfunction _interopRequireDefault(obj) {
            return obj &gt;&gt; obj.__esModule ? obj : { default: obj };
         }
         \n\nvar a = (0, _add2.default)(10, 20);
         \nvar b = (0, _multiply2.default)(40, 10);
         \n\nconsole.log(\"%c\" + a, \"font-size:30px;color:green;\");
         \nconsole.log(\"%c\" + b, \"font-size:30px;color:green;\");
         \n\n//# sourceURL = webpack:///./src/main.js?"
      );

/***/ }),

/***/ "./src/multiply.js":
/*!*************************!*\
   !*** ./src/multiply.js ***!
   \*************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {

"use strict";
eval(
   "\n\nvar multiply = function multiply(x, y) {\n return x * y;\n};
   \n\nmodule.exports = multiply;
   \n\n//# sourceURL = webpack:///./src/multiply.js?"
);

/***/ })

/******/ });

Komut

Çıktıyı tarayıcıda test etme komutu aşağıdadır -

npm run publish

Projenize index.html ekleyin. Bu, dev / main_bundle.js'yi çağırır.

<html>
   <head></head>
   <body>
      <script type="text/javascript" src="dev/main_bundle.js"></script>
   </body>
</html>

Çıktı

ES6 modülleri ve Gulp

Gulp'u modülleri tek bir dosyada toplamak için kullanmak için, browsererify ve babelify kullanacağız. Öncelikle proje kurulumunu oluşturup gerekli paketleri kuracağız.

komut

npm init

Proje kurulumuna başlamadan önce aşağıdaki paketleri yüklememiz gerekiyor -

npm install --save-dev gulp
npm install --save-dev babelify
npm install --save-dev browserify
npm install --save-dev babel-preset-env
npm install --save-dev babel-core
npm install --save-dev gulp-connect
npm install --save-dev vinyl-buffer
npm install --save-dev vinyl-source-stream

kurulumdan sonra package.json

Şimdi, modülleri bir araya toplama görevini çalıştırmaya yardımcı olacak gulpfile.js'yi oluşturalım. Yukarıda kullanılan aynı dosyaları web paketi ile kullanacağız.

Misal

add.js

var add = (x,y) => {
   return x+y;
}

module.exports=add;

multiply.js

var multiply = (x,y) => {
   return x*y;
};

module.exports = multiply;

main.js

import add from './add';
import multiply from './multiply'

let a = add(10,20);
let b = multiply(40,10);

console.log("%c"+a,"font-size:30px;color:green;");
console.log("%c"+b,"font-size:30px;color:green;");

Gulpfile.js burada oluşturulur. Bir kullanıcı tarayacak ve babelify için tranform kullanacaktır. babel-preset-env, kodu es5'e aktarmak için kullanılır.

Gulpfile.js

const gulp = require('gulp');
const babelify = require('babelify');
const browserify = require('browserify');
const connect = require("gulp-connect");
const source = require('vinyl-source-stream');
const buffer = require('vinyl-buffer');

gulp.task('build', () => {
   browserify('src/main.js')
   .transform('babelify', {
      presets: ['env']
   })
   .bundle()
   .pipe(source('main.js'))
   .pipe(buffer())
   .pipe(gulp.dest('dev/'));
});
gulp.task('default', ['es6'],() => {
   gulp.watch('src/app.js',['es6'])
});

gulp.task('watch', () => {
   gulp.watch('./*.js', ['build']);
});

gulp.task("connect", function () {
   connect.server({
      root: ".",
      livereload: true
   });
});

gulp.task('start', ['build', 'watch', 'connect']);

Modül dışa aktarma ve içe aktarma işlemleriyle ilgilenmek için browsererify ve babelify kullanıyoruz ve aynısını aşağıdaki gibi bir dosyada birleştiriyoruz -

gulp.task('build', () => {
   browserify('src/main.js')
   .transform('babelify', {
      presets: ['env']
   })
   .bundle()
   .pipe(source('main.js'))
   .pipe(buffer())
   .pipe(gulp.dest('dev/'));
});

Babelify'ın env ön ayarlı çağrıldığı dönüşümü kullandık.

Main.js ile src klasörü, tarayıcıya verilir ve dev klasörüne kaydedilir.

Komutu çalıştırmalıyız gulp start dosyayı derlemek için -

komut

npm start

Burada oluşturulan son dosya dev/ klasör -

(function() {
   function r(e,n,t) {
      function o(i,f) {
         if(!n[i]) {
            if(!e[i]) {
               var c = "function"==typeof require&&require;
               if(!f&&c)return c(i,!0);if(u)return u(i,!0);
               var a = new Error("Cannot find module '"+i+"'");
               throw a.code = "MODULE_NOT_FOUND",a
            }
            var p = n[i] = {exports:{}};
            e[i][0].call(
               p.exports,function(r) {
                  var n = e[i][1][r];
                  return o(n||r)
               }
            ,p,p.exports,r,e,n,t)
         }
         return n[i].exports
      }
      for(var u="function"==typeof require>>require,i = 0;i<t.length;i++)o(t[i]);return o
   }
   return r
})()
({1:[function(require,module,exports) {
   "use strict";

   var add = function add(x, y) {
      return x + y;
   };

   module.exports = add;
},{}],2:[function(require,module,exports) {
   'use strict';

   var _add = require('./add');
   var _add2 = _interopRequireDefault(_add);
   var _multiply = require('./multiply');
   var _multiply2 = _interopRequireDefault(_multiply);
   function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
   var a = (0, _add2.default)(10, 20);
   var b = (0, _multiply2.default)(40, 10);

   console.log("%c" + a, "font-size:30px;color:green;");
   console.log("%c" + b, "font-size:30px;color:green;");
},
{"./add":1,"./multiply":3}],3:[function(require,module,exports) {
   "use strict";

   var multiply = function multiply(x, y) {
      return x * y;
   };

   module.exports = multiply;

},{}]},{},[2]);

Aynı şeyi index.html'de kullanacağız ve çıktıyı almak için tarayıcıda aynısını çalıştıracağız -

<html>
   <head></head>
   <body>
      <h1>Modules using Gulp</h1>
      <script type="text/javascript" src="dev/main.js"></script>
   </body>
</html>

Çıktı

Bu bölümde, ES7 özelliklerini ES5'e nasıl aktaracağımızı öğreneceğiz.

ECMA Script 7, kendisine eklenen aşağıdaki yeni özelliklere sahiptir -

  • Async-Await
  • Üs Alma Operatörü
  • Array.prototype.includes()

Babeljs kullanarak bunları ES5'e derleyeceğiz. Proje gereksinimlerinize bağlı olarak, kodu herhangi bir ecma sürümünde, yani ES7'den ES6'ya veya ES7'den ES5'e derlemek de mümkündür. ES5 sürümü en kararlı olduğu ve tüm modern ve eski tarayıcılarda iyi çalıştığı için kodu ES5'e derleyeceğiz.

Async-Bekleme

Async, örtük bir vaat döndüren asenkron bir işlevdir. Söz ya çözüldü ya da reddedildi. Zaman uyumsuz işlev, normal standart işlevle aynıdır. İşlev, bir söz verene kadar yürütmeyi duraklatan bir ifadeyi bekleyebilir ve onu aldığında yürütme devam eder. Await, yalnızca işlev eşzamansız ise çalışacaktır.

İşte async ve await üzerinde çalışan bir örnek.

Misal

let timer = () => {
   return new Promise(resolve => {
      setTimeout(() => {
         resolve("Promise resolved after 5 seconds");
      }, 5000);
   });
};
let out = async () => {
   let msg = await timer();
   console.log(msg);
   console.log("hello after await");
};
out();

Çıktı

Promise resolved after 5 seconds
hello after await

Await ifadesi timer işlevi çağrılmadan önce eklenir. Zamanlayıcı işlevi 5 saniye sonra sözünü geri verecektir. Bu yüzden, await, zamanlayıcı işleviyle ilgili taahhüt çözülene veya reddedilene ve daha sonra devam edene kadar yürütmeyi durduracaktır.

Şimdi yukarıdaki kodu babel kullanarak ES5'e aktaralım.

ES7 - Async-Bekleme

let timer = () => {
   return new Promise(resolve => {
      setTimeout(() => {
         resolve("Promise resolved after 5 seconds");
      }, 5000);
   });
};
let out = async () => {
   let msg = await timer();
   console.log(msg);
   console.log("hello after await");
};
out();

komut

npx babel asyncawait.js --out-file asyncawait_es5.js

BabelJS - ES5

"use strict";

var timer = function timer() {
   return new Promise(function (resolve) {
      setTimeout(function () {
         resolve("Promise resolved after 5 seconds");
      }, 5000);
   });
};
var out = async function out() {
   var msg = await timer();
   console.log(msg);
   console.log("hello after await");
};

out();

Babeljs nesneyi veya yöntemleri derlemez; bu nedenle burada kullanılan sözler aktarılmayacak ve olduğu gibi gösterilecektir. Eski tarayıcılardaki vaatleri desteklemek için vaatleri destekleyecek bir kod eklememiz gerekiyor. Şimdilik babel-polyfill'i aşağıdaki gibi kuralım -

npm install --save babel-polyfill

Dev-bağımlılık değil bir bağımlılık olarak kaydedilmelidir.

Kodu tarayıcıda çalıştırmak için, node_modules \ babel-polyfill \ dist \ polyfill.min.js'deki polyfill dosyasını kullanacağız ve aşağıda gösterildiği gibi komut dosyası etiketini kullanarak çağıracağız -

<!DOCTYPE html>
<html>
   <head>
      <title>BabelJs Testing</title>
   </head>
   <body>
      <script src="node_modules\babel-polyfill\dist\polyfill.min.js" type="text/javascript"></script>
      <script type="text/javascript" src="aynscawait_es5.js"></script>
   </body>
</html>

Yukarıdaki test sayfasını çalıştırdığınızda, çıktıyı konsolda aşağıda gösterildiği gibi göreceksiniz.

Üs Alma Operatörü

** ES7'de üs alma için kullanılan operatördür. Aşağıdaki örnek aynı şeyin ES7'de çalışmasını gösterir ve kod babeljs kullanılarak aktarılır.

Misal

let sqr = 9 ** 2;
console.log(sqr);

Çıktı

81

ES6 - Üs alma

let sqr = 9 ** 2;
console.log(sqr);

Üs alma operatörünü aktarmak için aşağıdaki gibi kurulacak bir eklenti kurmamız gerekiyor -

komut

npm install --save-dev babel-plugin-transform-exponentiation-operator

Eklenti ayrıntılarını şuraya ekleyin: .babelrc aşağıdaki gibi dosya -

{
   "presets":[
      "es2015"
   ],
   "plugins": ["transform-exponentiation-operator"]
}

komut

npx babel exponeniation.js --out-file exponeniation_es5.js

BabelJS - ES5

"use strict";

var sqr = Math.pow(9, 2);
console.log(sqr);

Array.prototype.includes ()

Bu özellik, kendisine iletilen öğe dizide mevcutsa true, aksi takdirde false verir.

Misal

let arr1 = [10, 6, 3, 9, 17];
console.log(arr1.includes(9));
let names = ['Siya', 'Tom', 'Jerry', 'Bean', 'Ben'];
console.log(names.includes('Tom'));
console.log(names.includes('Be'));

Çıktı

true
true
false

Babel-polyfill'i burada tekrar kullanmalıyız. includesbir dizi üzerinde bir yöntemdir ve aktarılmayacaktır. Eski tarayıcılarda çalışması için polyfill'i dahil etmek için ek bir adıma ihtiyacımız var.

ES6 - dizi. İçerir

let arr1 = [10, 6, 3, 9, 17];
console.log(arr1.includes(9));
let names = ['Siya', 'Tom', 'Jerry', 'Bean', 'Ben'];
console.log(names.includes('Tom'));
console.log(names.includes('Be'));

komut

npx babel array_include.js --out-file array_include_es5.js

Babel-ES5

'use strict';

var arr1 = [10, 6, 3, 9, 17];
console.log(arr1.includes(9));
var names = ['Siya', 'Tom', 'Jerry', 'Bean', 'Ben'];
console.log(names.includes('Tom'));
console.log(names.includes('Be'));

Eski tarayıcıda test etmek için aşağıda gösterildiği gibi polyfill kullanmamız gerekir -

<!DOCTYPE html>
<html>
   <head>
      <title>BabelJs Testing</title>
   </head>
   <body>
      <script src="node_modules\babel-polyfill\dist\polyfill.min.js" type="text/javascript"></script>
      <script type="text/javascript" src="array_include_es5.js"></script>
   </body>
</html>

Çıktı

Dize doldurma, javascript'e eklenen yeni ES8 özelliğidir. Babel kullanarak ES5'e dizgi dolgusu aktaracak basit bir örnek üzerinde çalışacağız.

Dize Dolgusu

Dize dolgusu, belirtilen uzunluğa göre sol taraftan başka bir dize ekler. Dize doldurma sözdizimi aşağıda gösterildiği gibidir -

Sözdizimi

str.padStart(length, string);
str.padEnd(length, string);

Misal

const str = 'abc';

console.log(str.padStart(8, '_'));
console.log(str.padEnd(8, '_'));

Çıktı

_____abc
abc_____

ES8 - Dize Dolgu

const str = 'abc';

console.log(str.padStart(8, '_'));
console.log(str.padEnd(8, '_'));

komut

npx babel strpad.js --out-file strpad_es5.js

Babel - ES5

'use strict';

var str = 'abc';

console.log(str.padStart(8, '_'));
console.log(str.padEnd(8, '_'));

Js, babel-polyfill ile birlikte aşağıda gösterildiği gibi kullanılmalıdır -

test.html

<!DOCTYPE html>
<html>
   <head>
      <title>BabelJs Testing</title>
   </head>
   <body>
      <script src="node_modules\babel-polyfill\dist\polyfill.min.js" type="text/javascript"></script>
      <script type="text/javascript" src="strpad_es5.js"></script>
   </body>
</html>

BabelJS, mevcut ön ayarlar ve eklentilere göre verilen kodun sözdizimini değiştiren bir javascript derleyicisidir. Babel derlemesinin akışı aşağıdaki 3 bölümü içerir -

  • parsing
  • transforming
  • printing

Babel'e verilen kod, sadece sözdizimi değiştirilerek olduğu gibi geri verilir. Kodları es6'dan es5'e veya tam tersi şekilde derlemek için .babelrc dosyasına ön ayarların eklendiğini gördük. Ön ayarlar bir dizi eklentiden başka bir şey değildir. Derleme sırasında ön ayarlar veya eklenti ayrıntıları verilmezse Babel hiçbir şeyi değiştirmez.

Şimdi aşağıdaki eklentileri tartışalım -

  • transform-class-properties
  • Transform-exponentiation-operator
  • For-of
  • nesne istirahati ve yayılması
  • async/await

Şimdi, bir proje kurulumu oluşturacağız ve birkaç eklenti üzerinde çalışacağız, bu da babel'deki eklentilerin gereksinimlerini net bir şekilde anlamamızı sağlayacaktır.

komut

npm init

Babel - babel cli, babel core, babel-preset vb. İçin gerekli paketleri yüklemeliyiz.

Babel 6 için paketler

npm install babel-cli babel-core babel-preset-es2015 --save-dev

Babel 7 için paketler

npm install @babel/cli @babel/core @babel/preset-env --save-dev

Projenizde bir js dosyası oluşturun ve js kodunuzu yazın.

Sınıflar - Sınıf özelliklerini dönüştür

Bu amaçla aşağıda verilen kodlara uyun -

Misal

main.js

class Person {
   constructor(fname, lname, age, address) {
      this.fname = fname;
      this.lname = lname;
      this.age = age;
      this.address = address;
   }

   get fullname() {
      return this.fname + "-" + this.lname;
   }
}
var a = new Person("Siya", "Kapoor", "15", "Mumbai");
var persondet = a.fullname;

Şu anda, babel'e herhangi bir ön ayar veya eklenti detayı vermedik. Kodu komut kullanarak aktarırsak -

npx babel main.js --out-file main_out.js

main_out.js

class Person {
   constructor(fname, lname, age, address) {
      this.fname = fname;
      this.lname = lname;
      this.age = age;
      this.address = address;
   }

   get fullname() {
      return this.fname + "-" + this.lname;
   }
}
var a = new Person("Siya", "Kapoor", "15", "Mumbai");
var persondet = a.fullname;

Kodu olduğu gibi alacağız. Şimdi ön ayarı ekleyelim.babelrc dosya.

Note - Oluştur .babelrc projenizin kök klasöründeki dosya.

.babelrc for babel 6

.babelrc for babel 7

{
   "presets":["@babel/env"]
}

Ön ayarları zaten kurduk; şimdi komutu tekrar çalıştıralım -

npx babel main.js --out-file main_out.js

main_out.js

"use strict";

var _createClass = function () {
   function defineProperties(target, props) {
      for (var i = 0; i < props.length; i++) {
         var descriptor = props[i];
         descriptor.enumerable = descriptor.enumerable || false; 
         descriptor.configurable = true; 
         if ("value" in descriptor) descriptor.writable = true; 
         Object.defineProperty(target, descriptor.key, descriptor); 
      }
   }
   return function (Constructor, protoProps, staticProps) { 
      if (protoProps) defineProperties(Constructor.prototype, protoProps); 
      if (staticProps) defineProperties(Constructor, staticProps); 
      return Constructor; 
   }; 
}();

function _classCallCheck(instance, Constructor) { 
   if (!(instance instanceof Constructor)) {
      throw new TypeError("Cannot call a class as a function"); 
   } 
}

var Person = function () {
   function Person(fname, lname, age, address) {
      _classCallCheck(this, Person);

      this.fname = fname;
      this.lname = lname;
      this.age = age;
      this.address = address;
   }

   _createClass(Person, [{
      key: "fullname",
      get: function get() {
         return this.fname + "-" + this.lname;
      }
   }]);
   return Person;
}();

var a = new Person("Siya", "Kapoor", "15", "Mumbai");
var persondet = a.fullname;

ES6'da sınıf sözdizimi aşağıdaki gibidir

class Person {
   constructor(fname, lname, age, address) {
      this.fname = fname;
      this.lname = lname;
      this.age = age;
      this.address = address;
   }

   get fullname() {
      return this.fname + "-" + this.lname;
   }
}

Yapıcı vardır ve sınıfın tüm özellikleri onun içinde tanımlanmıştır. Bu durumda, sınıfın dışında sınıf özelliklerini tanımlamamız gerekir, bunu yapamayız.

Misal

class Person {
   name = "Siya Kapoor";

   fullname = () => {
      return this.name;
   }
}
var a = new Person();
var persondet = a.fullname();
console.log("%c"+persondet, "font-size:25px;color:red;");

Yukarıdaki kodu derlersek, babel'de bir hata atar. Bu, kodun derlenmemesiyle sonuçlanır.

Bunun istediğimiz şekilde çalışmasını sağlamak için babel-plugin-transform-class-properties adlı babel eklentisini kullanabiliriz. Çalışmasını sağlamak için önce aşağıdaki gibi yüklememiz gerekir -

Babel 6 için paketler

npm install --save-dev babel-plugin-transform-class-properties

Babel 7 için paket

npm install --save-dev @babel/plugin-proposal-class-properties

Add the plugin to .babelrc file for babel 6 -

.babelrc for babel 7

{
   "plugins": ["@babel/plugin-proposal-class-properties"]
}

Şimdi komutu tekrar çalıştıracağız.

komut

npx babel main.js --out-file main_out.js

main.js

class Person {
   name = "Siya Kapoor";

   fullname = () => {
      return this.name;
   }
}
var a = new Person();
var persondet = a.fullname();
console.log("%c"+persondet, "font-size:25px;color:red;");

Compiled to main_out.js

class Person {
   constructor() {
      this.name = "Siya Kapoor";

      this.fullname = () => {
         return this.name;
      };
   }
}
var a = new Person();
var persondet = a.fullname();
console.log("%c"+persondet, "font-size:25px;color:red;");

Output

Bir tarayıcıda kullanıldığında elde ettiğimiz çıktı aşağıdadır -

Üsleme Operatörü - dönüştürme-üs alma-operatörü

** ES7'de üs alma için kullanılan operatördür. Aşağıdaki örnek ES7'de nasıl çalıştığını göstermektedir. Ayrıca babeljs kullanarak kodun nasıl aktarılacağını da gösterir.

Misal

let sqr = 9 ** 2;
console.log("%c"+sqr, "font-size:25px;color:red;");

Üs alma operatörünü aktarmak için aşağıdaki gibi yüklenecek bir eklentiye ihtiyacımız var -

Packages for babel 6

npm install --save-dev babel-plugin-transform-exponentiation-operator

Packages for babel 7

npm install --save-dev @babel/plugin-transform-exponentiation-operator

Eklenti ayrıntılarını şuraya ekleyin: .babelrc babel 6 için aşağıdaki dosya -

{
   "plugins": ["transform-exponentiation-operator"]
}

.babelrc for babel 7

{
   "plugins": ["@babel/plugin-transform-exponentiation-operator"]
}

command

npx babel exponeniation.js --out-file exponeniation_out.js

exponeniation_out.js

let sqr = Math.pow(9, 2);
console.log("%c" + sqr, "font-size:25px;color:red;");

Output

İçin

Babel6 ve 7'deki eklentiler için gerekli paketler aşağıdaki gibidir -

Babel6

npm install --save-dev babel-plugin-transform-es2015-for-of

Babil 7

npm install --save-dev @babel/plugin-transform-for-of

.babelrc for babel6

{
   "plugins": ["transform-es2015-for-of"]
}

.babelrc for babel7

{
   "plugins": ["@babel/plugin-transform-for-of"]
}

forof.js

let foo = ["PHP", "C++", "Mysql", "JAVA"];
for (var i of foo) {
   console.log(i);
}

komut

npx babel forof.js --out-file forof_es5.js

Forof_es5.js

let foo = ["PHP", "C++", "Mysql", "JAVA"];
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;

try {
   for (var _iterator = foo[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
      var i = _step.value;

      console.log(i);
   }
} catch (err) {
   _didIteratorError = true;
   _iteratorError = err;
} finally {
   try {
      if (!_iteratorNormalCompletion && _iterator.return) {
         _iterator.return();
      }
   } finally {
      if (_didIteratorError) {
         throw _iteratorError;
      }
   }
}

Output

nesne istirahati yayıldı

Babel6 ve 7'deki eklentiler için gerekli paketler aşağıdaki gibidir -

Babil 6

npm install --save-dev babel-plugin-transform-object-rest-spread

Babil 7

npm install --save-dev @babel/plugin-proposal-object-rest-spread

.babelrc for babel6

{
   "plugins": ["transform-object-rest-spread"]
}

.babelrc for babel7

{
   "plugins": ["@babel/plugin-proposal-object-rest-spread"]
}

o.js

let { x1, y1, ...z1 } = { x1: 11, y1: 12, a: 23, b: 24 };
console.log(x1);
console.log(y1);
console.log(z1);

let n = { x1, y1, ...z1};
console.log(n);

komut

npx babel o.js --out-file o_es5.js

o_es5.js

var _extends = Object.assign || function (target) {
   for (var i = 1; i < arguments.length; i++) {
      var source = arguments[i]; for (var key in source) {
         if (Object.prototype.hasOwnProperty.call(source, key)) {
            target[key] = source[key]; 
         } 
      } 
   } 
   return target; 
};

function _objectWithoutProperties(obj, keys) {
   var target = {};
   for (var i in obj) {
      if (keys.indexOf(i) >= 0) continue;
      if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;
      target[i] = obj[i];
   }
   return target;
}

let _x1$y1$a$b = { x1: 11, y1: 12, a: 23, b: 24 }, { x1, y1 } = _x1$y1$a$b,
   z1 = _objectWithoutProperties(_x1$y1$a$b, ["x1", "y1"]);
console.log(x1);
console.log(y1);
console.log(z1);

let n = _extends({ x1, y1 }, z1);
console.log(n);

Output

eşzamansız / bekleyin

Babel 6 için aşağıdaki paketlerin yüklenmesine ihtiyacımız var -

npm install --save-dev babel-plugin-transform-async-to-generator

Babel 7 için paketler

npm install --save-dev @babel/plugin-transform-async-to-generator

.babelrc for babel 6

{
   "plugins": ["transform-async-to-generator"]
}

.babelrc for babel 7

{
   "plugins": ["@babel/plugin-transform-async-to-generator"]
}

async.js

let timer = () => {
   return new Promise(resolve => {
      setTimeout(() => {
         resolve("Promise resolved after 5 seconds");
      }, 5000);
   });
};
let out = async () => {
   let msg = await timer();
   console.log(msg);
   console.log("hello after await");
};

out();

komut

npx babel async.js --out-file async_es5.js

async_es5.js

function _asyncToGenerator(fn) {
   return function () {
      var gen = fn.apply(this, arguments);
      return new Promise(function (resolve, reject) {
         function step(key, arg) {
            try {
               var info = gen[key](arg);
               var value = info.value; 
            } catch (error) {
               reject(error);
               return; 
            } if (info.done) {
               resolve(value); 
            } else {
               return Promise.resolve(value).then(function (value) {
                  step("next", value);
               },
               function (err) {
                  step("throw", err); }); 
            }
         } return step("next"); 
      });
   };
}

let timer = () => {
   return new Promise(resolve => {
      setTimeout(() => {
         resolve("Promise resolved after 5 seconds");
      }, 5000);
   });
};
let out = (() => {
   var _ref = _asyncToGenerator(function* () {
      let msg = yield timer();
      console.log(msg);
      console.log("hello after await");
   });

   return function out() {
      return _ref.apply(this, arguments);
   };
})();
out();

Vaatlerin desteklenmediği tarayıcılarda çalışmayacağı için polyfill'i kullanmalıyız.

Output

Babel Polyfill, mevcut olmayan özellikler için web tarayıcılarına destek ekler. Babel, kodu son ecma versiyonundan istediğimiz versiyona derler. Sözdizimini ön ayara göre değiştirir, ancak kullanılan nesneler veya yöntemler için hiçbir şey yapamaz. Geriye dönük uyumluluk için bu özellikler için polyfill kullanmalıyız.

Çoklu doldurulabilen özellikler

Eski tarayıcılarda kullanıldığında polyfill desteğine ihtiyaç duyan özelliklerin listesi aşağıdadır -

  • Promises
  • Map
  • Set
  • Symbol
  • Weakmap
  • Weakset
  • Array.from, Array.includes, Array.of, Array # find, Array.buffer, Array # findIndex
  • Object.assign, Object.entries, Object.values

Proje kurulumu oluşturacağız ve ayrıca babel polyfill'in çalışmasını göreceğiz.

komut

npm init

Şimdi babel için gerekli olan paketleri kuracağız.

Babel 6 için paketler

npm install babel-cli babel-core babel-preset-es2015 --save-dev

Babel 7 için paketler

npm install @babel/cli @babel/core @babel/preset-env --save-dev

İşte son package.json -

Kodu es5'e derlemek istediğimiz için ön ayarlara es2015'i de ekleyeceğiz.

.babelrc for babel 6

.babelrc for babel 7

{
   "presets":["@babel/env"]
}

Kodumuzu tarayıcıda test edebilmemiz için bir lite-hizmet kuracağız -

npm install --save-dev lite-server

Kodumuzu package.json içinde derlemek için babel komutunu ekleyelim -

Ayrıca lite-server'ı çağıran build komutunu da ekledik.

Babel-polyfill, babel-core paketiyle birlikte kurulur. Babel-polyfill, aşağıda gösterildiği gibi düğüm modüllerinde mevcut olacaktır -

Sözler üzerinde daha fazla çalışacağız ve onunla birlikte babel-polyfill'i kullanacağız.

ES6 - Sözler

let timingpromise = new Promise((resolve, reject) => {
   setTimeout(function() {
      resolve("Promise is resolved!");
   }, 1000);
});

timingpromise.then((msg) => {
   console.log("%c"+msg, "font-size:25px;color:red;");
});

komut

npx babel promise.js --out-file promise_es5.js

BabelJS - ES5

"use strict";

var timingpromise = new Promise(function (resolve, reject) {
   setTimeout(function () {
      resolve("Promise is resolved!");
   }, 1000);
});

timingpromise.then(function (msg) {
   console.log("%c"+msg, "font-size:25px;color:red;");
});

Derlemenin hiçbir şeyi değiştirmesine gerek yoktur. Sözün kodu olduğu gibi aktarıldı. Ancak vaatleri desteklemeyen tarayıcılar, kodu es5'e derlememize rağmen bir hata verecektir.

Bu sorunu çözmek için, son derlenmiş es5 koduyla birlikte polyfill eklememiz gerekiyor. Kodu tarayıcıda çalıştırmak için, babel-polyfill dosyasını düğüm modüllerinden alacağız ve aşağıda gösterildiği gibi vaatleri kullanmak istediğimiz .html dosyasına ekleyeceğiz -

index.html

<html>
   <head>
   </head>
   <body>
      <h1>Babel Polyfill Testing</h1>
      <script type="text/javascript" src="node_modules/babel-polyfill/dist/polyfill.min.js"></script>
      <script type="text/javascript" src="promise_es5.js"></script>
   </body>
</html>

çıktı

İndex.html dosyasında polyfill.min.js dosyasını kullandık. node_modules ardından promise_es5.js -

<script type="text/javascript" src="node_modules/babel-polyfill/dist/polyfill.min.js"></script>

<script type="text/javascript" src="promise_es5.js"></script>

Note - Polyfill dosyası, ana javascript çağrısından önce başlangıçta kullanılmalıdır.

Dize Dolgusu

Dize dolgusu, belirtilen uzunluğa göre sol taraftan başka bir dize ekler. Dize doldurma sözdizimi aşağıda gösterildiği gibidir -

Sözdizimi

str.padStart(length, string);
str.padEnd(length, string);

Misal

const str = 'abc';

console.log(str.padStart(8, '_'));
console.log(str.padEnd(8, '_'));

Çıktı

_____abc
abc_____

Babel - ES5

npx babel strpad.js --out-file strpad_es5.js

komut

'use strict';

var str = 'abc';

console.log(str.padStart(8, '_'));
console.log(str.padEnd(8, '_'));

Js, babel-polyfill ile birlikte aşağıda gösterildiği gibi kullanılmalıdır -

test.html

<!DOCTYPE html>
<html>
   <head>
      <title>BabelJs Testing </title>
   </head>
   <body>
      <script src="node_modules/babel-polyfill/dist/polyfill.min.js" type="text/javascript"></script>
      <script type="text/javascript" src="strpad_es5.js"></script>
   </body>
</html>

Harita, Set, WeakSet, WeakMap

Bu bölümde, hakkında bilgi edineceğizMap, Set, WeakSet, WeakMap.

  • Map anahtar / değer çiftine sahip bir nesnedir.

  • Set aynı zamanda bir nesnedir ancak benzersiz değerlere sahiptir.

  • WeakMap and WeakSet iare ayrıca anahtar / değer çiftlerine sahip nesnelerdir.

Map, Set, WeakMap ve WeakSet ES6'ya eklenen yeni özelliklerdir. Eski tarayıcılarda kullanılmak üzere dönüştürmek için polyfill'i kullanmamız gerekiyor. Bir örnek üzerinde çalışacağız ve kodu derlemek için polyfill kullanacağız.

Misal

let m = new Map(); //map example
m.set("0","A");
m.set("1","B");
console.log(m);

let set = new Set(); //set example
set.add('A');
set.add('B');
set.add('A');
set.add('B');
console.log(set);

let ws = new WeakSet(); //weakset example
let x = {};
let y = {};
ws.add(x);
console.log(ws.has(x));
console.log(ws.has(y));

let wm = new WeakMap(); //weakmap example
let a = {};
wm.set(a, "hello");
console.log(wm.get(a));

Çıktı

Map(2) {"0" => "A", "1" => "B"}
Set(2) {"A", "B"}
true
false
hello

komut

npx babel set.js --out-file set_es5.js

Babel-ES5

"use strict";

var m = new Map(); //map example
m.set("0", "A");
m.set("1", "B");
console.log(m);

var set = new Set(); //set example
set.add('A');
set.add('B');
set.add('A');
set.add('B');
console.log(set);

var ws = new WeakSet(); //weakset example
var x = {};
var y = {};
ws.add(x);
console.log(ws.has(x));
console.log(ws.has(y));

var wm = new WeakMap(); //weakmap example
var a = {};
wm.set(a, "hello");
console.log(wm.get(a));

Js, babel-polyfill ile birlikte aşağıda gösterildiği gibi kullanılmalıdır -

test.html

<!DOCTYPE html>
<html>
   <head>
      <title>BabelJs Testing</title>
   </head>
   <body>
      <script src="node_modules/babel-polyfill/dist/polyfill.min.js" type="text/javascript"></script>
      <script type="text/javascript" src="set_es5.js"></script>
   </body>
</html>

Çıktı

Dizi Yöntemleri

Dizi üzerinde birçok özellik ve yöntem kullanılabilir; örneğin, array.from, array.includes, vb.

Bunu daha iyi anlamak için aşağıdaki örnek üzerinde çalışmayı düşünelim.

Misal

arraymethods.js

var arrNum = [1, 2, 3];

console.log(arrNum.includes(2));
console.log(Array.from([3, 4, 5], x => x + x));

Output

true
[6, 8, 10]

komut

npx babel arraymethods.js --out-file arraymethods_es5.js

Babel-es5

"use strict";

var arrNum = [1, 2, 3];

console.log(arrNum.includes(2));
console.log(Array.from([3, 4, 5], function (x) {
return x + x;
}));

Dizide kullanılan yöntemler olduğu gibi yazdırılır. Bunların eski tarayıcılarda çalışmasını sağlamak için, başlangıçta aşağıda gösterildiği gibi polyfill dosyası eklememiz gerekir -

index.html

<html>
   <head></head>
   <body>
      <h1>Babel Polyfill Testing</h1>
      <script type="text/javascript" src="node_modules/babel-polyfill/dist/polyfill.min.js"></script>
      <script type="text/javascript" src="arraymethods_es5.js"></script>
   </body>
</html>

Çıktı

BabelJS, yerleşik bir Komut Satırı Arayüzü ile birlikte gelir; burada, JavaScript kodu, kullanımı kolay komutlar kullanılarak ilgili ECMA Komut Dosyasına kolayca derlenebilir. Bu bölümde bu komutların kullanımını tartışacağız.

Öncelikle projemiz için babel-cli kuracağız. Kodu derlemek için babeljs kullanacağız.

Babel-cli ile oynamak için projeniz için bir klasör oluşturun.

komut

npm init

Görüntüle

Yukarıdaki proje için oluşturulan Package.json -

Babel-cli'yi kurmak için komutları çalıştıralım.

Babel 6 paketi

npm install --save-dev babel-cli

Babel 7 için paket

npm install --save-dev @babel/cli

Görüntüle

Babel-cli'yi kurduk ve işte güncellenmiş package.json -

Buna ek olarak, babel-preset ve babel-core kurmamız gerekiyor. Şimdi kurulum için komuta bakalım.

Babel 6 için paketler

npm install --save-dev babel-preset-env
npm install --save-dev babel-core

Babel 7 için paketler

npm install --save-dev @babel/core
npm install --save-dev @babel/preset-env

İşte yukarıdaki komutlar için güncellenmiş package.json -

Geriye dönük uyumluluğa sahip olmak için yazacağımız JavaScript kodunu derlememiz gerektiğinden, onu ECMA Script 5'e derleyeceğiz. Bunun için babel'e ön ayarı, yani derlemenin olacağı es sürümünü aramasını söylememiz gerekiyor bitti. Bir yaratmalıyız.babelrc> dosyasını aşağıda gösterildiği gibi oluşturduğumuz projemizin kök klasöründeki.

Aşağıdaki ön ayar ayrıntılarına sahip bir json nesnesi içerir -

{ "presets": ["env"] }

Babel 7 için .babelrc aşağıdaki gibidir -

{
   "presets":["@babel/env"]
}

Projeye yerel babel kurduk. Babel'i projemizde kullanabilmek için package.json'da aynısını aşağıdaki gibi belirtmemiz gerekiyor -

JS dosyalarını derleyin

Artık JavaScript dosyalarımızı derlemeye hazırız. Projenizde bir src klasörü oluşturun; bu klasörde, main.js adlı bir dosya oluşturun ve aşağıda gösterildiği gibi bir es6 javascript kodu yazın -

komut

npx babel src/main.js

Çıktı

Yukarıdaki durumda, main.js'deki kod, es5 sürümünde terminalde görüntülenir. Es6'daki ok işlevi, yukarıda gösterildiği gibi es5'e dönüştürülür. Derlenen kodu terminalde görüntülemek yerine aşağıda gösterildiği gibi farklı bir dosyada saklayacağız.

Projemizde, derlenen dosyaların saklanmasını istediğimiz bir klasör oluşturduk. Çıktıyı istediğimiz yerde derleyip depolayacak komut aşağıdadır.

komut

npx babel src/main.js --out-file out/main_out.js

Çıktı

--Out-file komutundaki seçenek, çıktıyı seçtiğimiz dosya konumunda saklamamıza yardımcı olur.

Ana dosya eklentisinde her değişiklik yaptığımızda dosyanın güncellenmesini istiyoruz. --watch veya -w komut seçeneği aşağıda gösterildiği gibi.

komut

npx babel src/main.js --watch --out-file out/main_out.js

Çıktı

Ana dosyada değişiklik yapabilirsiniz; bu değişiklik derlenen dosyaya yansıtılacaktır.

Yukarıdaki durumda, günlük mesajını değiştirdik ve --watch seçeneği herhangi bir değişikliği kontrol etmeye devam eder ve aynı değişiklikler derlenen dosyaya eklenir.

Derlenmiş dosya

Önceki bölümlerimizde, dosyaları nasıl derleyeceğimizi öğrendik. Şimdi bir dizin derleyeceğiz ve derlenen dosyaları başka bir dizinde depolayacağız.

Src klasöründe, adında bir tane daha js dosyası oluşturacağız. main1.js. Şu anda, src klasöründe 2 javascript dosyası varmain.js ve main1.js.

Dosyalardaki kod aşağıdadır -

main.js

var arrowfunction = () => {
   console.log("Added changes to the log message");
}

main1.js

var handler = () => {
   console.log("Added one more file");
}

Aşağıdaki komut, kodu srcklasörü ve out / klasöründe saklayın. Tüm dosyaları kaldırdık.out/klasör ve boş tuttu. Komutu çalıştırıp out / klasöründeki çıktıyı kontrol edeceğiz.

komut

npx babel src --out-dir out

Çıkış klasöründe 2 dosya var - main.js ve main1.js

main.js

"use strict";

var arrowfunction = function arrowfunction() {
   console.log("Added changes to the log message");
};

main1.js

"use strict";

var handler = function handler() {
   console.log("Added one more file");
};

Daha sonra, her iki dosyayı da babeljs kullanarak tek bir dosyada derlemek için aşağıda verilen komutu uygulayacağız.

komut

npx babel src --out-file out/all.js

Çıktı

"use strict";

var arrowfunction = function arrowfunction() {
   console.log("Added changes to the log message");
};
"use strict";

var handler = function handler() {
console.log("Added one more file");
};

Bazı dosyaların derlenmesini göz ardı etmek istersek, aşağıda gösterildiği gibi --ignore seçeneğini kullanabiliriz.

komut

npx babel src --out-file out/all.js --ignore src/main1.js

Çıktı

all.js

"use strict";

var arrowfunction = function arrowfunction() {
   console.log("Added changes to the log message");
};

Dosya derleme sırasında kullanılacak eklenti seçeneklerini kullanabiliriz. Eklentilerden yararlanmak için aşağıda gösterildiği gibi yüklememiz gerekir.

komut

npm install --save-dev babel-plugin-transform-exponentiation-operator

expo.js

let sqr = 9 ** 2;
console.log(sqr);

komut

npx babel expo.js --out-file expo_compiled.js --plugins=babel-plugin-transform-exponentiation-operator

Çıktı

"use strict";

var sqr = Math.pow(9, 2);
console.log(sqr);

Aşağıda gösterildiği gibi komuttaki ön ayarları da kullanabiliriz.

komut

npx babel src/main.js --out-file main_es5.js --presets=es2015

Yukarıdaki durumu test etmek için, ön ayarlar seçeneğini .babelrc'den kaldırdık.

main.js

var arrowfunction = () => {
   console.log("Added changes to the log message");
}

main_es5.js

"use strict";

var arrowfunction = function arrowfunction() {
   console.log("Added changes to the log message");
};

Ayrıca .babelrc komut satırından aşağıdaki gibi göz ardı edebiliriz -

npx babel --no-babelrc src/main.js --out-file main_es5.js --presets=es2015

Yukarıdaki durumu test etmek için ön ayarları .babelrc'ye geri ekledik ve komuta eklediğimiz --no-babelrc nedeniyle aynısı yok sayılacak. Main_es5.js dosyası ayrıntıları aşağıdaki gibidir -

main_es5.js

"use strict";

var arrowfunction = function arrowfunction() {
   console.log("Added changes to the log message");
};

Babel ön ayarları, babel aktarıcısına belirtilen modda aktarmasını söyleyen yapılandırma ayrıntılarıdır. İşte bu bölümde tartışacağımız en popüler ön ayarlardan bazıları:

  • ES2015
  • Env
  • React

Kodun dönüştürülmesini istediğimiz ortama sahip ön ayarlar kullanmamız gerekir. Örneğin, es2015 ön ayarı kodu es5'e dönüştürür . Env değerine sahip ön ayar da es5'e dönüşür . Ayrıca ek özelliği, yani seçenekleri vardır. Özelliğin tarayıcıların son sürümlerinde desteklenmesini istiyorsanız, babel kodu yalnızca bu tarayıcılarda özellik desteği yoksa dönüştürür. Preset react ile Babel, ne zaman tepki vereceğini kodlar.

Ön Ayarlarla çalışmak için proje kök klasörümüzde .babelrc dosyası oluşturmamız gerekiyor. Çalışmayı göstermek için, aşağıda gösterildiği gibi bir proje kurulumu oluşturacağız.

komut

npm init

Babel cli, babel core vb. İle birlikte gerekli babel ön ayarını aşağıdaki şekilde kurmamız gerekiyor.

Babel 6 paketleri

npm install babel-cli babel-core babel-preset-es2015 --save-dev

Babel 7 Paketleri

npm install @babel/cli @babel/core @babel/preset-env --save-dev

Note - babel-preset-es2015, babel 7'den itibaren kullanımdan kaldırılmıştır.

es2015 or @babel/env

Projenin kök dizininde .babelrc dosyası oluşturun (babel 6) -

.Babelrc'de ön ayarlar es2015'tir. Bu, babel derleyicisine kodun es2015'e dönüştürülmesini istediğimizin göstergesidir.

Babel 7 için aşağıdaki ön ayarları kullanmamız gerekiyor -

{
   "presets":["@babel/env"]
}

İşte kurulumdan sonra package.json -

Babel'i yerel olarak kurduğumuz için package.json'daki scripts bölümüne babel komutunu ekledik.

Önceden ayarlanmış es2015'i kullanarak aktarımı kontrol etmek için basit bir örnek üzerinde çalışalım.

Misal

main.js

let arrow = () => {
   return "this is es6 arrow function";
}

Aşağıda gösterildiği gibi es5'e aktarılmıştır.

komut

npx babel main.js --out-file main_es5.js

main_es5.js

"use strict";

var arrow = function arrow() {
   return "this is es6 arrow function";
};

Env

Env ön ayarını kullanarak, son kodun aktarılacağı ortamı belirtebilirsiniz.

Yukarıda oluşturulan aynı proje kurulumunu kullanacağız ve aşağıda gösterildiği gibi ön ayarları es2015'ten env'e değiştireceğiz.

Ek olarak, babel-preset-env'i kurmamız gerekiyor. Aynısını kurmak için aşağıda verilen komutu uygulayacağız.

komut

npm install babel-preset-env --save-dev

Main.js'yi tekrar derleyip çıktıyı göreceğiz.

main.js

let arrow = () => {
   return "this is es6 arrow function";
}

komut

npx babel main.js --out-file main_env.js

main_env.js

"use strict";

var arrow = function arrow() {
   return "this is es6 arrow function";
};

Aktarılan kodun es5 olduğunu gördük. Kodumuzun yürütüleceği ortamı bildiğimiz takdirde, bunu belirtmek için bu ön ayarı kullanabiliriz. Örneğin, tarayıcıları aşağıda gösterildiği gibi chrome ve firefox için son 1 sürüm olarak belirtirsek.

komut

npx babel main.js --out-file main_env.js

main_env.js

"use strict";

let arrow = () => {
   return "this is es6 arrow function";
};

Şimdi ok işlevi sözdizimini olduğu gibi alıyoruz. ES5 sözdizimine aktarılmaz. Bunun nedeni, kodumuzun desteklemesini istediğimiz ortamın zaten ok işlevini desteklemesidir.

Babel, babel-preset-env kullanarak kodu çevreye göre derlemekle ilgilenir. Derlemeyi aşağıda gösterildiği gibi nodejs ortamına göre de hedefleyebiliriz

Kodun son derlemesi aşağıda gösterildiği gibidir.

komut

npx babel main.js --out-file main_env.js

main_env.js

"use strict";

let arrow = () => {
   return "this is es6 arrow function";
};

Babel, kodu nodejs'nin mevcut sürümüne göre derler.

Tepki Ön Ayarı

Reactjs kullanırken react ön ayarını kullanabiliriz. Basit bir örnek üzerinde çalışacağız ve çıktıyı görmek için react ön ayarını kullanacağız.

Ön ayarı kullanmak için babel-preset-react (babel 6) 'yı aşağıdaki gibi kurmamız gerekir -

npm install --save-dev babel-preset-react

Babel 7 için aşağıdaki gibidir -

npm install --save-dev @babel/preset-react

Babel6 için .babelrc'ye yapılan değişiklikler aşağıdaki gibidir -

Babel 7 için

{
   "presets": ["@babel/preset-react"]
}

main.js

<h1>Hello, world!</h1>

komut

npx babel main.js --out-file main_env.js

main_env.js

React.createElement(
   "h1",
   null,
   "Hello, world!"
);

Main.js'deki kod, ön ayar: react ile reactjs sözdizimine dönüştürülür.

Webpack, bağımlılıkları olan tüm modülleri - js, stiller, görüntüler, vb. Statik varlıklar .js, .css, .jpg, .png, vb. İçinde paketleyen bir modül paketleyicidir. Webpack, gerekli biçimde derlemeye yardımcı olan ön ayarlarla birlikte gelir. Örneğin, son çıktıyı react biçiminde, es2015 veya env ön ayarı elde etmeye yardımcı olan react ön ayarı, kodu ES5 veya 6 veya 7'de derlemeye yardımcı olur. Proje kurulumunda babel 6 kullandık. Babel7'ye geçmek isterseniz, @ babel / babel-paket-adı kullanarak gerekli babel paketlerini kurun.

Burada babel ve webpack kullanarak proje kurulumunu tartışacağız. Adlı bir klasör oluşturun ve aynı şeyi visual studio IDE'de açın.

Proje kurulumunu oluşturmak için npm initbabelwebpack'i aşağıdaki gibi çalıştırın -

İşte npm init'ten sonra oluşturulan package.json -

Şimdi babel ve webpack ile çalışmamız için gerekli paketleri kuracağız.

npm install --save-dev webpack
npm install --save-dev webpack-dev-server
npm install --save-dev babel-core
npm install --save-dev babel-loader
npm install --save-dev babel-preset-env

İşte kurulumdan sonra Package.json -

Şimdi, js dosyalarını paketlemek için tüm ayrıntıları içeren bir webpack.config.js dosyası oluşturacağız. Bu dosyalar babel kullanılarak es5'e derlenecek.

Sunucu kullanarak web paketini çalıştırmak için web paketi sunucusu kullanıyoruz. Eklenen detaylar aşağıdadır -

Webpack-dev-server'ı başlatacak ve son dosyaların depolandığı yolu güncelleyecek olan yayınlama komutunu ekledik. Şu anda son dosyaları güncellemek için kullanacağımız yol / dev klasörüdür.

Webpack'i kullanmak için aşağıdaki komutu çalıştırmamız gerekiyor -

npm run publish

Öncelikle webpack.config.js dosyalarını oluşturmamız gerekiyor. Bunlar, web paketinin çalışması için yapılandırma ayrıntılarına sahip olacaktır.

Dosyadaki detaylar aşağıdaki gibidir -

var path = require('path');

module.exports = {
   entry: {
      app: './src/main.js'
   },
   output: {
      path: path.resolve(__dirname, 'dev'),
      filename: 'main_bundle.js'
   },
   mode:'development',
   module: {
      rules: [
         {
            test: /\.js$/,
            include: path.resolve(__dirname, 'src'),
            loader: 'babel-loader',
            query: {
               presets: ['env']
            }
         }
      ]
   }
};

Dosyanın yapısı yukarıda gösterildiği gibidir. Geçerli yol ayrıntılarını veren theh yolu ile başlar.

var path = require('path'); //gives the current path

Ardından, input, output ve module özelliklerine sahip olan module.exports nesnesidir. Giriş, başlangıç ​​noktasıdır. Burada derlenmesi gereken ana js dosyalarını vermemiz gerekiyor.

entry: {
   app: './src/main.js'
},

path.resolve(_dirname, ‘src/main.js’) - dizindeki src klasörünü ve bu klasördeki main.js'yi arayacaktır.

Çıktı

output: {
   path: path.resolve(__dirname, 'dev'),
   filename: 'main_bundle.js'
},

Çıktı, yol ve dosya adı ayrıntılarına sahip bir nesnedir. Yol, derlenen dosyanın tutulacağı klasörü tutacak ve dosya adı .html dosyanızda kullanılacak son dosyanın adını söyleyecektir.

modül

module: {
   rules: [
      {
         test: /\.js$/,
         include: path.resolve(__dirname, 'src'),
         loader: 'babel-loader',
         query: {
            presets: ['env']
         }
      }
   ]
}
  • Modül, kuralların ayrıntılarını içeren bir nesnedir. Aşağıdaki özelliklere sahiptir -

    • test
    • include
    • loader
    • query
  • Test , .js ile biten tüm js dosyalarının ayrıntılarını tutacaktır. Verilen giriş noktasının sonunda .js'yi arayacak kalıbı vardır.

  • Dahil et, bakılacak dosyalarda kullanılan klasöre talimat verir.

  • Yükleyici , kodları derlemek için babel yükleyici kullanır.

  • Sorgu , env - es5 veya es6 veya es7 değerine sahip bir dizi olan özellik ön ayarlarına sahiptir.

İçinde klasör src ve main.js oluşturun ; ES6'da js kodunuzu yazın. Daha sonra, webpack ve babel kullanarak es5'e derlendiğini görmek için komutu çalıştırın.

src/main.js

let add = (a,b) => {
   return a+b;
};
let c = add(10, 20);
console.log(c);

Komutu çalıştırın -

npm run pack

Derlenen dosya aşağıdaki gibi görünür -

dev/main_bundle.js

!function(e) {
   var t = {};
   function r(n) {
      if(t[n])return t[n].exports;var o = t[n] = {i:n,l:!1,exports:{}};
      return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports
   }
   r.m = e,r.c = t,r.d = function(e,t,n) {
      r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})
   },
   r.r = function(e) {
      "undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})
   },
   r.t = function(e,t) {
      if(1&t&&(e = r(e)),8&t)return e;
      if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;
      var n = Object.create(null);
      if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t) {return e[t]}.bind(null,o));
      return n
   },
   r.n = function(e) {
      var t = e&&e.__esModule?function() {return e.default}:function() {return e};
      return r.d(t,"a",t),t
   },
   r.o = function(e,t) {return Object.prototype.hasOwnProperty.call(e,t)},
   r.p = "",r(r.s = 0)
}([function(e,t,r) {"use strict";var n = function(e,t) {return e+t}(10,20);console.log(n)}]);
!function(e) {
   var t = {};
   function r(n) {
      if(t[n])return t[n].exports;
      var o = t[n] = {i:n,l:!1,exports:{}};
      return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports
   }
   r.m = e,r.c = t,r.d = function(e,t,n) {
      r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})
   },
   r.r = function(e) {
      "undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})
   },
   r.t = function(e,t) {
      if(1&t&&(e=r(e)),
      8&t)return e;
      if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;
      var n = Object.create(null);
      if(
         r.r(n),
         Object.defineProperty(n,"default",{enumerable:!0,value:e}),
         2&t&&"string"!=typeof e
      )
      for(var o in e)r.d(n,o,function(t) {return e[t]}.bind(null,o));
      return n
   },
   r.n = function(e) {
      var t = e&&e.__esModule?function() {return e.default}:function() {return e};
      return r.d(t,"a",t),t
   },
   r.o = function(e,t) {
      return Object.prototype.hasOwnProperty.call(e,t)
   },
   r.p = "",r(r.s = 0)
}([function(e,t,r) {
   "use strict";
   var n = function(e,t) {return e+t}(10,20);
   console.log(n)
}]);

Kod, yukarıda gösterildiği gibi derlenmiştir. Webpack, dahili olarak gerekli olan bazı kodları ekler ve main.js'deki kod sonunda görülür. Değeri yukarıda gösterildiği gibi teselli ettik.

Son js dosyasını .html dosyasına aşağıdaki gibi ekleyin -

<html>
   <head></head>
   <body>
      <script type="text/javascript" src="dev/main_bundle.js"></script>
   </body>
</html>

Komutu çalıştırın -

npm run publish

Çıktıyı kontrol etmek için dosyayı şurada açabiliriz -

http://localhost:8080/

Konsol değerini yukarıda gösterildiği gibi alıyoruz. Şimdi webpack ve babel kullanarak tek bir dosyada derlemeye çalışalım.

Birden çok js dosyasını tek bir dosyada toplamak için webpack kullanacağız. Babel, es6 kodunu es5'e derlemek için kullanılacaktır.

Şimdi, src / klasöründe 2 js dosyamız var - main.js ve Person.js şu şekilde -

person.js

export class Person {
   constructor(fname, lname, age, address) {
      this.fname = fname;
      this.lname = lname;
      this.age = age;
      this.address = address;
   }

   get fullname() {
      return this.fname +"-"+this.lname;
   }
}

Kişi sınıfının ayrıntılarını kullanmak için dışa aktarmayı kullandık.

main.js

import {Person} from './person'
var a = new Person("Siya", "Kapoor", "15", "Mumbai");
var persondet = a.fullname;
console.log(persondet);

Main.js'de, Kişi'yi dosya yolundan içe aktardık.

Note- person.js eklemek zorunda değiliz, sadece dosyanın adını eklememiz gerekiyor. Kişi sınıfında bir nesne oluşturduk ve ayrıntıları yukarıda gösterildiği gibi teselli ettik.

Webpack birleştirecek person.js ve main.js ve güncelle dev/main_bundle.jstek dosya olarak. Komutu çalıştırınnpm run publish tarayıcıda çıktıyı kontrol etmek için -

Bu bölümde JSX ve babel ile çalışmayı anlayacağız. Ayrıntılara girmeden önce JSX'in ne olduğunu anlayalım.

JSX nedir?

JSX, içinde xml sözdizimi kombinasyonu bulunan bir JavaScript kodudur. JSX etiketinin etiket adı, öznitelikleri ve xml gibi görünmesini sağlayan alt öğeleri vardır.

React şablon oluşturmak için normal JavaScript yerine JSX kullanır. Kullanmak gerekli değildir, ancak onunla birlikte gelen bazı artılar aşağıdadır.

  • JavaScript'e kod derlerken optimizasyon gerçekleştirdiği için daha hızlıdır.

  • Ayrıca tür açısından güvenlidir ve hataların çoğu derleme sırasında yakalanabilir.

  • HTML konusunda bilgiliyseniz, şablon yazmayı daha kolay ve daha hızlı hale getirir.

Proje kurgusunda babel 6 kullandık. Babel 7'ye geçmek istemeniz durumunda, gerekli babel paketlerini kullanarak kurun.@babel/babel-package-name.

Babel kullanarak jsx'i normal JavaScript'e tepki vererek derlemek için proje kurulumu oluşturacağız ve web paketi kullanacağız.

Proje kurulumunu başlatmak için babel, react ve webpack kurulumu için aşağıda verilen komutları çalıştırın.

komut

npm init

Şimdi birlikte çalışmamız gereken gerekli paketleri - babel, webpack ve jsx - kuracağız.

npm install --save-dev webpack
npm install --save-dev webpack-cli
npm install --save-dev webpack-dev-server
npm install --save-dev babel-core
npm install --save-dev babel-loader
npm install --save-dev babel-preset-es2015
npm install --save-dev babel-preset-react
npm install --save-dev react
npm install --save-dev react-dom

İşte kurulumdan sonra package.json -

Şimdi, js dosyalarını paketlemek ve babel kullanarak es5'te derlemek için tüm ayrıntılara sahip olacak bir webpack.config.js dosyası oluşturacaktır.

Sunucuyu kullanarak webpack çalıştırmak için webpack-server denen bir şey vardır. Publish adlı bir komut ekledik; bu komut webpack-dev-server'ı başlatacak ve son dosyaların depolandığı yolu güncelleyecektir. Şu anda son dosyaları güncellemek için kullanacağımız yol / dev klasörüdür.

Web paketini kullanmak için aşağıdaki komutu çalıştırmamız gerekir -

npm run publish

Biz yaratacağız webpack.config.js Web paketinin çalışması için yapılandırma ayrıntılarına sahip dosyalar.

Dosyadaki detaylar aşağıdaki gibidir -

var path = require('path');

module.exports = {
   entry: {
      app: './src/main.js'
   },
   output: {
      path: path.resolve(__dirname, 'dev'),
      filename: 'main_bundle.js'
   },
   mode:'development',
   module: {
      rules: [
         {
            test:/\.(js|jsx)$/,
            include: path.resolve(__dirname, 'src'),
            loader: 'babel-loader',
            query: {
               presets: ['es2015','react']
            }
         }
      ]
   }
};

Dosyanın yapısı yukarıda gösterildiği gibidir. Geçerli yol ayrıntılarını veren yolla başlar.

var path = require('path'); //gives the current path

Ardından, input, output ve module özelliklerine sahip olan module.exports nesnesidir.

Giriş, başlangıç ​​noktasıdır. Burada derlemek istediğimiz ana js dosyalarını vermemiz gerekiyor.

entry: {
   app: './src/main.js'
},

path.resolve(_dirname, ‘src/main.js’) - dizinde src klasörünü arayacak ve main.js o klasörde.

Çıktı

output: {
   path: path.resolve(__dirname, 'dev'),
   filename: 'main_bundle.js'
},

Çıktı, yol ve dosya adı ayrıntılarına sahip bir nesnedir. Yol, derlenen dosyanın saklanacağı klasörü tutacak ve dosya adı, dosyanızda kullanılacak son dosyanın adını söyleyecektir..html dosya.

modül

module: {
   rules: [
      {
         test:/\.(js|jsx)$/,
         include: path.resolve(__dirname, 'src'),
         loader: 'babel-loader',
         query: {
            presets: ['es2015','react']
         }
      }
   ]
}
  • Modül , test, dahil etme, yükleyici, sorgu gibi özelliklere sahip kural ayrıntılarına sahip nesnedir.

  • Test , .js ve .jsx ile biten tüm js dosyalarının ayrıntılarını tutacaktır. Verilen giriş noktasının sonunda .js ve .jsx'i arayacak bir modele sahiptir.

  • Dahil et , dosyaları aramak için kullanılacak klasörü söyler.

  • Yükleyici , kodu derlemek için babel yükleyici kullanır.

  • Sorgu , env - es5 veya es6 veya es7 değerine sahip bir dizi olan özellik ön ayarlarına sahiptir. Es2015'i kullandık ve ön ayar olarak tepki verdik.

Klasör oluşturun src/. Ekle main.js ve App.jsx içinde.

App.jsx

import React from 'react';

class App extends React.Component {
   render() {
         var style = {
         color: 'red',
         fontSize: 50
      };
      return (
         <div style={style}>
            Hello World!!!
         </div>
      );
   }
}
export default App;

main.js

import React from 'react';
import ReactDOM from 'react-dom';
import App from './App.jsx';

ReactDOM.render(
      , document.getElementById('app'));

.Js dosyasını paketlemek ve ön ayarları kullanarak dönüştürmek için aşağıdaki komutu çalıştırın es2015 ve react.

komut

npm run pack

Ekle main_bundle.js geliştirici klasöründen index.html -

<!DOCTYPE html>
<html lang = "en">
   <head>
      <meta charset = "UTF-8">
      <title>React App</title>
   </head>
   <body>
      <div id = "app"></div>
      <script src = "dev/main_bundle.js"></script>
   </body>
</html>

komut

npm run publish

Çıktı

Flow, JavaScript için statik bir tür denetleyicidir. Flow ve babel ile çalışmak için önce bir proje kurgusu oluşturacağız. Proje kurgusunda babel 6 kullandık. Babel 7'ye geçmek istemeniz durumunda, gerekli babel paketlerini kullanarak kurun.@babel/babel-package-name.

komut

npm init

Akış ve babel için gerekli paketleri kurun -

npm install --save-dev babel-core babel-cli babel-preset-flow flow-bin babel-plugin-transform-flow-strip-types

İşte kurulumdan sonraki son package.json. Ayrıca, kodu komut satırında yürütmek için babel ve akış komutu eklendi.

Oluşturmak .babelrc proje kurulumunun içinde ve aşağıda gösterildiği gibi ön ayarlar ekleyin

Oluşturmak main.js JavaScript kodunuzu dosyalayın ve flow kullanarak yazın -

main.js

/* @flow */
function concat(a: string, b: string) {
   return a + b;
}

let a = concat("A", "B");
console.log(a);

Ön ayarları kullanarak kodu derlemek için babel komutunu kullanın: normal javascript'e akış

npx babel main.js --out-file main_flow.js

main_flow.js

function concat(a, b) {
   return a + b;
}

let a = concat("A", "B");
console.log(a);

Ayrıca adlı eklentiden de faydalanabiliriz. babel-plugin-transform-flow-strip-types ön ayarlar yerine aşağıdaki gibi -

İçinde .babelrceklentiyi aşağıdaki gibi ekleyin -

main.js

/* @flow */
function concat(a: string, b: string) {
   return a + b;
}

let a = concat("A", "B");
console.log(a);

komut

npx babel main.js --out-file main_flow.js

main_flow.js

function concat(a, b) {
   return a + b;
}

let a = concat("A", "B");
console.log(a);

Bu bölümde babel ve gulp kullanarak proje kurgusu oluşturacağız. Gulp, platform olarak Node.js kullanan bir görev çalıştırıcıdır. Gulp, JavaScript dosyalarını es6'dan es5'e aktaracak görevleri çalıştıracak ve tamamlandığında, değişiklikleri test etmek için sunucuyu başlatacaktır. Proje kurgusunda babel 6 kullandık. Babel 7'ye geçmek istemeniz durumunda, gerekli babel paketlerini kullanarak kurun.@babel/babel-package-name.

Öncelikle npm komutlarını kullanarak projeyi oluşturacağız ve başlamak için gerekli paketleri kuracağız.

komut

npm init

Gulpbabel adlı bir klasör oluşturduk. Ayrıca, gulp ve diğer gerekli bağımlılıkları kuracağız.

komut

npm install gulp --save-dev
npm install gulp-babel --save-dev
npm install gulp-connect --save-dev
npm install babel-preset-env --save-dev
npm install babel-core --save-dev

Önceden ayarlanmış ortam ayrıntılarını ekleyeceğiz .babelrc aşağıdaki gibi dosya

gulpfile.js

var gulp =require('gulp');
var babel =require('gulp-babel');
var connect = require("gulp-connect");
gulp.task('build', () => {
   gulp.src('src/./*.js')
      .pipe(babel())
      .pipe(gulp.dest('./dev'))
});

gulp.task('watch', () => {
   gulp.watch('./*.js', ['build']);
});

gulp.task("connect", function () {
   connect.server({
      root: ".",
      livereload: true
   });
});

gulp.task('start', ['build', 'watch', 'connect']);

Yutkunmada ['inşa', 'izle', 'bağlan'] olmak üzere üç görev oluşturduk. Src klasöründe bulunan tüm js dosyaları babel kullanılarak aşağıdaki gibi es5'e dönüştürülecektir -

gulp.task('build', () => {
   gulp.src('src/./*.js')
      .pipe(babel())
      .pipe(gulp.dest('./dev'))
});

Son değişiklikler geliştirici klasöründe saklanır. Babel, ön ayar ayrıntılarını kullanır..babelrc. Başka bir ön ayara geçmek istemeniz durumunda, içindeki ayrıntıları değiştirebilirsiniz..babelrc dosya.

Şimdi es6 javascript kullanarak src klasöründe bir .js dosyası oluşturacak ve gulp start değişiklikleri yürütmek için komut.

src/main.js

class Person {
   constructor(fname, lname, age, address) {
      this.fname = fname;
      this.lname = lname;
      this.age = age;
      this.address = address;
   }

   get fullname() {
      return this.fname +"-"+this.lname;
   }
}

Command: gulp start

dev/main.js

Bu babel kullanılarak aktarılıyor -

"use strict";

var _createClass = function () {
   function defineProperties(target, props) { 
      for (var i = 0; i <props.length; i++) { 
         var descriptor = props[i]; 
         descriptor.enumerable = descriptor.enumerable || false; 
         descriptor.configurable = true; 
         if ("value" in descriptor) descriptor.writable = true; 
         Object.defineProperty(target, descriptor.key, descriptor); 
      } 
   } 
   return function (Constructor, protoProps, staticProps) { 
      if (protoProps) defineProperties(Constructor.prototype, protoProps); 
      if (staticProps) defineProperties(Constructor, staticProps); 
      return Constructor; 
   }; 
}();

function _classCallCheck(instance, Constructor) {
   if (!(instance instanceof Constructor)) { 
      throw new TypeError("Cannot call a class as a function"); 
   } 
}

var Person = function () {
   function Person(fname, lname, age, address) {
      _classCallCheck(this, Person);
      this.fname = fname;
      this.lname = lname;
      this.age = age;
      this.address = address;
   }
   _createClass(Person, [{
      key: "fullname",
      get: function get() {
         return this.fname + "-" + this.lname;
      }
   }]);

   return Person;
}();

Index.html

Bu kullanılarak yapılır transpiled dev/main.js -

<html>
   <head></head>
   <body>
      <script type="text/javascript" src="dev/main.js"></script>
      <h1 id="displayname"></h1>
      <script type="text/javascript">
         var a = new Student("Siya", "Kapoor", "15", "Mumbai");
         var studentdet = a.fullname;
         document.getElementById("displayname").innerHTML = studentdet;
      </script>
   </body>
</html>

Output

ES6 özelliklerini kullanacağız ve basit bir proje oluşturacağız. Babeljs kodu ES5'e derlemek için kullanılacaktır. Proje, sabit bir saniye sonra otomatik olarak kayan bir dizi resme sahip olacaktır. Bunun üzerinde çalışmak için ES6 sınıfını kullanacağız. Proje kurgusunda babel 6 kullandık. Babel 7'ye geçmek istemeniz durumunda, gerekli babel paketlerini kullanarak kurun.@babel/babel-package-name.

Otomatik Slayt Görüntüleri

Projeyi inşa etmek için yudum kullanacağız. Başlangıç ​​olarak, aşağıda gösterildiği gibi proje kurulumunu oluşturacağız.

komut

npm init

Babelexample adlı bir klasör oluşturduk. Ayrıca, gulp ve diğer gerekli bağımlılıkları kuracağız.

komut

npm install gulp --save-dev
npm install gulp-babel --save-dev
npm install gulp-connect --save-dev
npm install babel-preset-env --save-dev

İşte kurulumdan sonra Package.json -

Önceden ayarlanmış ortam ayrıntılarını ekleyeceğiz .babelrc aşağıdaki gibi dosya -

Son dosyayı oluşturmak için yutkunma görevine ihtiyacımız olduğundan, ihtiyacımız olan görev ile gulpfile.js oluşturacağız.

gulpfile.js

var gulp = require('gulp');
var babel = require('gulp-babel');
var connect = require("gulp-connect");
gulp.task('build', () => {
   gulp.src('src/./*.js')
      .pipe(babel())
      .pipe(gulp.dest('./dev'))
});
gulp.task('watch', () => {
   gulp.watch('./*.js', ['build']);
});

gulp.task("connect", function () {
   connect.server({
      root: ".",
      livereload: true
   });
});

gulp.task('start', ['build', 'watch', 'connect']);

Yutkunmada ['inşa et', 'izle', 'bağlan'] olmak üzere üç görev oluşturduk . Src klasöründe bulunan tüm js dosyaları babel kullanılarak aşağıdaki gibi es5'e dönüştürülecektir.

gulp.task('build', () => {
   gulp.src('src/./*.js')
      .pipe(babel())
      .pipe(gulp.dest('./dev'))
});

Son değişiklikler geliştirici klasöründe saklanır. Babel, .babelrc'deki ön ayar ayrıntılarını kullanır. Başka bir ön ayara geçmek istemeniz durumunda .babelrc dosyasındaki ayrıntıları değiştirebilirsiniz.

Şimdi bir yaratacağız .js dosyasında src es6 JavaScript kullanarak klasör ve çalıştırın gulp start değişiklikleri yürütmek için komut.

Proje yapısı aşağıdaki gibidir -

src/slidingimage.js

class SlidingImage {
   constructor(width, height, imgcounter, timer) {
      this.counter = 0;
      this.imagecontainerwidth = width;
      this.imagecontainerheight = height;
      this.slidercounter = imgcounter;
      this.slidetimer = timer;
      this.startindex = 1;
      this.css = this.applycss();
      this.maincontainer = this.createContainter();
      this.childcontainer = this.imagecontainer();
      this.autoslide();
   }

   createContainter() {
      let maindiv = document.createElement('div');
      maindiv.id = "maincontainer";
      maindiv.class = "maincontainer";
      document.body.appendChild(maindiv);
      return maindiv;
   }

   applycss() {
      let slidercss = ".maincontainer{ position : relative; margin :auto;}.left, 
         .right {
            cursor: pointer; position: absolute;" +
            "top: 50%; width: auto; padding: 16px; margin-top: -22px; color: white; font-weight: bold; " +
            "font-size: 18px; transition: 0.6s ease; border-radius: 0 3px 3px 0;
         }.right { right: 0; border-radius: 3px 0 0 3px;}" +
         ".left:hover, .right:hover { background-color: rgba(0,0,0,0.8);}";
      let style = document.createElement('style');
      style.id = "slidercss";
      style.type = "text/css";
      document.getElementsByTagName("head")[0].appendChild(style);
      let styleall = style;
      if (styleall.styleSheet) {
      styleall.styleSheet.cssText = slidercss;
      } else {
         let text = document.createTextNode(slidercss);
         style.appendChild(text);
      }
   }

   imagecontainer() {
      let childdiv = [];
      let imgcont = [];
      for (let a = 1; a >= this.slidercounter; a++) {
         childdiv[a] = document.createElement('div');
         childdiv[a].id = "childdiv" + a;
         childdiv[a].style.width = this.imagecontainerwidth + "px";
         childdiv[a].style.height = this.imagecontainerheight + "px";
         if (a > 1) {
            childdiv[a].style.display = "none";
         }
         imgcont[a] = document.createElement('img');
         imgcont[a].src = "src/img/img" + a + ".jpg";
         imgcont[a].style.width = "100%";
         imgcont[a].style.height = "100%";
         childdiv[a].appendChild(imgcont[a]);
         this.maincontainer.appendChild(childdiv[a]);
      }
   }

   autoslide() {
      console.log(this.startindex);
      let previousimg = this.startindex;
      this.startindex++;
      if (this.startindex > 5) {
         this.startindex = 1;
      }
      setTimeout(() => {
         document.getElementById("childdiv" + this.startindex).style.display = "";
         document.getElementById("childdiv" + previousimg).style.display = "none";
         this.autoslide();
      }, this.slidetimer);
   }
}

let a = new SlidingImage(300, 250, 5, 5000);

Biz yaratacağız img/src / klasöründe görüntülenmesi gereken resimlere ihtiyacımız var; bu görüntüler her 5 saniyede bir döndürülmelidir. dev / klasörü derlenen kodu saklayacaktır. Çalıştırgulp start son dosyayı oluşturmak için.

Nihai proje yapısı aşağıda gösterildiği gibidir -

İçinde slidingimage.jsBiz denilen bir sınıf oluşturduk SlidingImage createcontainer, imagecontainer ve benzeri yöntemleri vardır, autoslide ana konteyneri oluşturur ve buna görüntüleri ekler. Otomatik kaydırma yöntemi, görüntünün belirtilen zaman aralığından sonra değiştirilmesine yardımcı olur.

let a = new SlidingImage(300, 250, 5, 5000);

Bu aşamada sınıfa denir. Resmi döndürmek için genişliği, yüksekliği, resim sayısını ve saniye sayısını geçeceğiz .

komut

gulp start

dev/slidingimage.js

"use strict";

var _createClass = function () {
   function defineProperties(target, props) {
      for (var i = 0; i < props.length; i++) {
         var descriptor = props[i]; 
         descriptor.enumerable = descriptor.enumerable || false; 
         descriptor.configurable = true; 
         if ("value" in descriptor) descriptor.writable = true; 
         Object.defineProperty(target, descriptor.key, descriptor); 
      } 
   }
   return function (Constructor, protoProps, staticProps) {
      if (protoProps) defineProperties(Constructor.prototype, protoProps);
      if (staticProps) defineProperties(Constructor, staticProps); return Constructor;
   };
}();

function _classCallCheck(instance, Constructor) {
   if (!(instance instanceof Constructor)) {
      throw new TypeError("Cannot call a class as a function"); 
   } 
}

var SlidingImage = function () {
   function SlidingImage(width, height, imgcounter, timer) {
      _classCallCheck(this, SlidingImage);
      this.counter = 0;
      this.imagecontainerwidth = width;
      this.imagecontainerheight = height;
      this.slidercounter = imgcounter;
      this.slidetimer = timer;
      this.startindex = 1;
      this.css = this.applycss();
      this.maincontainer = this.createContainter();
      this.childcontainer = this.imagecontainer();
      this.autoslide();
   }
   _createClass(SlidingImage, [{
      key: "createContainter",
      value: function createContainter() {
         var maindiv = document.createElement('div');
         maindiv.id = "maincontainer";
         maindiv.class = "maincontainer";
         document.body.appendChild(maindiv);
         return maindiv;
      }
   }, {
      key: "applycss",
      value: function applycss() {
         var slidercss = ".maincontainer{ position : relative; margin :auto;}.left, .right {
            cursor: pointer; position: absolute;" + "top: 50%;
            width: auto;
            padding: 16px;
            margin-top: -22px;
            color: white;
            font-weight: bold;
            " + "font-size: 18px;
            transition: 0.6s ease;
            border-radius: 0 3px 3px 0;
         }
         .right { right: 0; border-radius: 3px 0 0 3px;}" +
            ".left:hover, .right:hover { background-color: rgba(0,0,0,0.8);}";
         var style = document.createElement('style');
         style.id = "slidercss";
         style.type = "text/css";
         document.getElementsByTagName("head")[0].appendChild(style);
         var styleall = style;
         if (styleall.styleSheet) {
            styleall.styleSheet.cssText = slidercss;
         } else {
            var text = document.createTextNode(slidercss);
            style.appendChild(text);
         }
      }
   }, {
      key: "imagecontainer",
      value: function imagecontainer() {
      var childdiv = [];
      var imgcont = [];
      for (var _a = 1; _a <= this.slidercounter; _a++) {
         childdiv[_a] = document.createElement('div');
         childdiv[_a].id = "childdiv" + _a;
         childdiv[_a].style.width = this.imagecontainerwidth + "px";
         childdiv[_a].style.height = this.imagecontainerheight + "px";
         if (_a > 1) {
            childdiv[_a].style.display = "none";
         }
         imgcont[_a] = document.createElement('img');
         imgcont[_a].src = "src/img/img" + _a + ".jpg";
         imgcont[_a].style.width = "100%";
         imgcont[_a].style.height = "100%";
         childdiv[_a].appendChild(imgcont[_a]);
         this.maincontainer.appendChild(childdiv[_a]);
         }
      }
   }, {
      key: "autoslide",
      value: function autoslide() {
         var _this = this;

         console.log(this.startindex);
         var previousimg = this.startindex;
         this.startindex++;
         if (this.startindex > 5) {
            this.startindex = 1;
         }
         setTimeout(function () {
            document.getElementById("childdiv" + _this.startindex).style.display = "";
            document.getElementById("childdiv" + previousimg).style.display = "none";
            _this.autoslide();
         }, this.slidetimer);
      }
   }]);
   return SlidingImage;
}();

var a = new SlidingImage(300, 250, 5, 5000);

Kod satırını tarayıcıda aşağıda gösterildiği gibi test edeceğiz -

index.html

<html>
   <head></head>
   <body>
      <script type="text/javascript" src="dev/slidingimage.js"></script>
      <h1>Sliding Image Demo</h1>
   </body>
</html>

Derlenen dosyayı dev klasöründen kullandık. index.html. Komutagulp start çıktıyı test edebileceğimiz sunucuyu başlatır.

Chrome'da

Firefox'ta

Internet Explorer'da

Derlenen kod tüm tarayıcılarda iyi çalışıyor.