こんにちは。TECH DRIVEの小笠原です。 Vol1につづき、本記事でもWebpackについてご紹介させていただきます。
今回はWebpackを使いES6で書かれたファイルのトランスパイルを行いたいと思います。
前提条件
- 1.node.jsが導入済みのMac OSであること
- 2.ES6やbabelが何か理解していること
Webpackについては、Vol1で触れておりますのでこちらに目を通していただければと。 dev.techdrive.top
また、本記事はWebpackでES6のトランスパイルを行うことに重きを置いておりますので、ES6やbabelの詳細に関しては割愛させていただきます。
Webpackの導入
今回はプロダクトが以下のディレクトリ構造であることを前提に進めます。
├── dist // HTMLから呼び出されるJSファイル ├── index.html ├── src └── js-es6 // ES6で書かれたJSファイル └── person.js
まずは、前回同様にpackage.json
ファイルを作成しましょう。
npm init
つづけてWebpackのインストールを行います。
npm install --save-dev webpack
次に今回トランスパイルを行うために必要なloader
を導入します。
loaderについて
現状ES6を使用するには、babel等のトランスパイラが必要になります。
Webpackでは、loaderという機能を通しトランスパイラを使用します。
loaderは複数種類があり、npmとして提供されています。
loaderの導入
それでは、Webpack上でbabelを利用するために必要なloaderをインストールします。
npm install --save-dev babel-loader babel-preset-es2015
次にES6の文法を用いて書いたJSファイルを用意します。
src/js-es6/person.js
module.exports = function() { class Person { constructor(name) { this.name = name; } hello() { alert('My name is ' + this.name); } } var kevin = new Person('kevin') kevin.hello(); }
※ ES6の文法(class)を使用するため仰々しい書き方をしていますが、処理自体はブラウザ上でコードが実行された際、アラートダイアログが表示されるシンプルなものです。
設定ファイルの作成
続けてルートディレクトリ直下に設定ファイルを作成し、前回と同じようなノリでトランスパイル対象のファイル情報と出力先の情報等を書いていきます。
今回はloaderを使用するので、前回より設定項目が増えています。
webpack.config.js
module.exports = { // トランスパイル起点となるファイル(複数指定可) entry: { 'person': './src/js-es6/person.js', }, // トランスパイルされたファイルの出力先の情報 output: { path: __dirname + '/dist', // パス情報 filename: '[name].js' // [name]には 、entryで指定したkey名が入る(今回の場合はperson) }, module: { loaders: [ // 使用するloaderに関する情報を記載 { test: /\.js$/, // トランスパイルを行うファイルの正規表現 exclude: /node_modules/, // 除外ファイル loader: "babel", // 使用するローダー query:{ presets: ['es2015'] } } ] } };
loaderを扱うためmodule
とloaders
というプロパティを記載しています。
Webpackでは複数のloaderを利用することができるため、loadersの値は配列となり、loader毎に設定情報を記載します。
トランスパイル実行
これでトランスパイルを行うための準備ができました。
webpackコマンドを実行してみましょう。
webpack
dist直下にトランスパイルされたファイルが入っていれば成功です!
試しに出力されたJSファイルをHTMLファイルから呼び出し、期待通り動作することを確認してみましょう。
index.html
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <script src='./dist/person.js'></script> </body> </html>
アラートダイアログで「'My name is kevin」と出力されれば、今回の目的は達成です!
まとめ
いかがでしょうか?今回ご紹介させていただいたloaderという機能は、Webpackの核となる機能といっても過言ではありません。
今回は触れませんでしたが、loaderを使用することでJSファイルからHTML/CSSファイルや画像ファイルを呼び込むことができ、HTML/CSS/JSをまとめたコンポーネントを作成することも可能です。
loaderの詳細に関しては、今後の連載の中でも触れていきますが、まずは入門編として本記事をお役立ていただけたのなら幸いです。