Babeljs-working-babel-with-webpack

提供:Dev Guides
移動先:案内検索

BabelJS-BabelとWebpackの使用

Webpackは、js、スタイル、画像などの依存関係を持つすべてのモジュールをパックするモジュールバンドラーです。 静的アセット.js、.css、.jpg、.pngなどに変換します。 Webpackには、必要な形式にコンパイルするのに役立つプリセットが付属しています。 たとえば、ES5または6または7などでコードをコンパイルするのに役立つes2015またはenvプリセットなど、react形式で最終出力を取得するのに役立つ反応プリセット。 プロジェクトのセットアップでbabel 6を使用しました。 babel7に切り替える場合は、@ babel/babel-package-nameを使用してbabelの必要なパッケージをインストールします。

ここでは、babelとwebpackを使用したプロジェクトのセットアップについて説明します。 __というフォルダーを作成し、Visual Studio IDEで同じフォルダーを開きます。

プロジェクトのセットアップを作成するには、次のようにnpm initbabelwebpackを実行します-

Babel Webpack

これは、npm initの後に作成されたpackage.jsonです-

Init Webpack

次に、babelとwebpackで作業するために必要なパッケージをインストールします。

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があります-

インストール後のパッケージ

ここで、jsファイルをバンドルするためのすべての詳細を含むwebpack.config.jsファイルを作成します。 これらのファイルは、babelを使用してes5にコンパイルされます。

サーバーを使用してwebpackを実行するには、webpack-serverを使用します。 以下はそれに追加された詳細です-

Webpackサーバー

webpack-dev-serverを起動し、最終ファイルが保存されているパスを更新するpublishコマンドを追加しました。 現在、最終ファイルの更新に使用するパスは/devフォルダーです。

Webpackを使用するには、次のコマンドを実行する必要があります-

npm run publish

まず、webpack.config.jsファイルを作成する必要があります。 これらには、webpackが機能するための構成の詳細が含まれます。

ファイル内の詳細は次のとおりです-

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']
            }
         }
      ]
   }
};

ファイルの構造は上記のとおりです。 現在のパスの詳細を提供するhパスで始まります。

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

次はmodule.exportsオブジェクトで、プロパティのエントリ、出力、モジュールがあります。 エントリは開始点です。 ここでは、コンパイルする必要があるメインのjsファイルを指定する必要があります。

entry: {
   app: './src/main.js'
},
  • path.resolve(_dirname、 ‘src/main.js’)*-ディレクトリ内のsrcフォルダーとそのフォルダー内のmain.jsを探します。

出力

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

出力は、パスとファイル名の詳細を含むオブジェクトです。 パスは、コンパイルされたファイルが保持されるフォルダーを保持し、ファイル名は、lファイルで使用される最終的なファイルの名前を示します。

モジュール

module: {
   rules: [
      {
         test:/\.js$/,
         include: path.resolve(__dirname, 'src'),
         loader: 'babel-loader',
         query: {
            presets: ['env']
         }
      }
   ]
}

モジュールは、ルールの詳細を持つオブジェクトです。 次のプロパティがあります-

  • test
  • 含める
  • ローダ
  • 問い合わせ

_Test_は、.jsで終わるすべてのjsファイルの詳細を保持します。 パターンがあり、指定されたエントリポイントの最後で.jsを検索します。

_Include_は、参照するファイルで使用中のフォルダーを指示します。

_Loader_は、コードのコンパイルにbabel-loaderを使用します。

_Query_には、プロパティプリセットがあります。これは、値env – es5またはes6またはes7の配列です。

srcフォルダーと_main.js_フォルダーを作成します。 ES6でjsコードを記述します。 後で、コマンドを実行して、webpackおよびbabelを使用してes5にコンパイルされることを確認します。

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

コマンドを実行します-

npm run pack

コンパイルされたファイルは次のようになります-

*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)
}]);

コードは上記のようにコンパイルされます。 Webpackは内部的に必要なコードを追加し、main.jsのコードは最後に表示されます。 上記のように値をコンソール化しました。

次のようにlファイルに最終的なjsファイルを追加します-

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

コマンドを実行します-

npm run publish

Module Webpack

出力を確認するには、ファイルを開くことができます-

*http://localhost:8080/*

モジュールWebpack出力

上記のコンソール値を取得します。 次に、webpackとbabelを使用して、単一のファイルにコンパイルしてみましょう。

webpackを使用して、複数のjsファイルを単一のファイルにバンドルします。 Babelは、es6コードをes5にコンパイルするために使用されます。

今、src/フォルダに2つのjsファイルがあります-main.jsとPerson.jsは次のように-

*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;
   }
}

エクスポートを使用してPersonクラスの詳細を使用しました。

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

main.jsでは、ファイルパスからPersonをインポートしました。

-person.jsを含める必要はなく、ファイルの名前だけを含める必要があります。 Personクラスのオブジェクトを作成し、上記のように詳細をコンソール化しました。

Webpackは person.jsmain.js を組み合わせ、 dev/main_bundle.js を1つのファイルとして更新します。 ブラウザで出力を確認するには、コマンド npm run publish を実行します-

Dev Main Bundle