Otsuka Yuhi
猫に支配されつつあるフロントエンドエンジニアです。スクラムマスターとかもやったりします。ゆめみという会社で働いています。趣味はエレキベースです。スラップ楽しい。
webpackとは?
今までの書き方と比較
まとめ
モジュール
エントリー
ポイント
webpack
export
import
JavaScriptのバンドルツール
HTMLで読み込むJSファイル
ES2015から導入された、別のJavaScriptファイルを読み込む仕組み。
各スクリプトをモジュールと呼び、exportで出力して、importで読み込む。
<!-- ES Modules を使うときは、type="module"属性を入れる -->
<script type="module" src="./main.js"></script>
// sayMessage関数をexportで出力
export function sayMessage(message){
console.log(message);
};
sub.js
// sub.js をimportで読み込み、sayMessage関数を引っ張ってくる
import { sayMessage } from './sub.js';
// sub.js の sayMessage関数を実行
sayMessage('おはよう世界');
// コンソールに「おはよう世界」と表示される
main.js
読み込み
<!-- これでもOK -->
<script type="module">
import { sayMessage } from './sub.js';
sayMessage('おはよう世界');
</script>
main.js を読み込み
sub.js を読み込み
HTML
HTML
type="module"属性が付く場合、モジュールレベルでスコープされるため、トップレベルの this が Windowオブジェクトではなくundefinedになり、グローバル汚染を防ぐことができる。また、そのスクリプトは、常にStrict モードとして動作する。
<script type="module">
console.log(this); // -> undefined
</script>
<script>
console.log(this); // -> window
</script>
type="module"
属性なし
ほりさげ! 🤔
ES Modules 対応状況
webpackを使えば、IE11でもES Modulesを使うことができる!
モジュール
エントリー
ポイント
JS以外もOK
HTMLで読み込むJSファイル
webpack + babel + sass
<link href="js/vendor/slick.min.css" rel="stylesheet">
<link href="js/vendor/slick.theme.min.css" rel="stylesheet">
<script src="js/vendor/jquery.min.js">
<script src="js/vendor/slick.min.js">
<script src="js/top.js">
今までの書き方
<script src="js/top.js">
webpack
たとえば、jQueryとslick.jsを使うときは。。。
こんな感じ!😁
トップページ
top.html
会社概要ページ
about.html
jQueryや、slickファイル一式をダウンロード
それぞれのJavaScriptファイルを個別にトランスパイル
<link href="js/vendor/slick.min.css" rel="stylesheet">
<link href="js/vendor/slick.theme.min.css" rel="stylesheet">
<script src="js/vendor/jquery.min.js">
<script src="js/vendor/slick.min.js">
<script src="js/top.js">
<link href="js/vendor/slick.min.css" rel="stylesheet">
<link href="js/vendor/slick.theme.min.css" rel="stylesheet">
<script src="js/vendor/jquery.min.js">
<script src="js/vendor/slick.min.js">
<script src="js/about.js">
top.html
about.html
<script src="js/top.js">
top.html
<script src="js/about.js">
about.html
<link href="js/vendor/slick.min.css" rel="stylesheet">
<link href="js/vendor/slick.theme.min.css" rel="stylesheet">
<script src="js/vendor/jquery.min.js">
<script src="js/vendor/slick.min.js">
<script src="js/top.js">
<link href="js/vendor/slick.min.css" rel="stylesheet">
<link href="js/vendor/slick.theme.min.css" rel="stylesheet">
<script src="js/vendor/jquery.min.js">
<script src="js/vendor/slick.min.js">
<script src="js/about.js">
top.html
about.html
<script src="js/top.js">
top.html
webpackのやり方
<script src="js/about.js">
about.html
今までのやり方
共通部分は、キャッシュさせたほうがよくね? 🤔
でも、大丈夫!😁
共通部分を、別で書き出すことも可能。
共通部分
<!-- slick.js の cssが入っている -->
<link href="css/vendor.css" rel="stylesheet">
<!-- jQuery、slick.js が入っている -->
<script src="js/vendor.js">
<script src="js/top.js">
<!-- slick.js の cssが入っている -->
<link href="css/vendor.css" rel="stylesheet">
<!-- jQuery、slick.js が入っている -->
<script src="js/vendor.js">
<script src="js/about.js">
top.html
about.html
<!--
以下の順番に読み込まないとエラーになる
jquery.min.js → slick.min.js → top.js
-->
<script src="js/vendor/jquery.min.js">
<script src="js/vendor/slick.min.js">
<script src="js/top.js">
<!-- 依存関係解決済み -->
<script src="js/top.js">
slick.jsはjQueryに依存している
(slick.jsを知らない人は、逆に書くかもしれない)
webpackで依存関係を解決
By Otsuka Yuhi
猫に支配されつつあるフロントエンドエンジニアです。スクラムマスターとかもやったりします。ゆめみという会社で働いています。趣味はエレキベースです。スラップ楽しい。