「松原ガレッジ」のブログ

大阪府松原市にあるウェブ開発・HP制作をするところ。管理人が思ったことや困ったこと、課題についてまとめていきます。

ウェブサイト制作にRollupを使う〜2021年2月更新〜

どうも!
大阪府松原市でウェブを中心としたソフトウェア開発を行っています。
コワーキングスペース松原ガレッジ管理人の五島です。

今日はRollupの話を少ししようかな〜と軽快に記事を書いてます!
設定はよっ(`・ω・´)という方はこちらのGitHubリポジトリを御覧ください。

目次はこちら

Rollup自体は特に利用しなくても、JavaScriptを実行することはできます。
しかし、 JavaScriptの新しい記法(ES2015またはES6)を利用したいという要望の上で、広いブラウザ対応を行おうと思ったら使っておくとベター(ほぼ必須?)という感じです。

似たようなツールにwebpackというものがありますが、こちらはJavaScriptだけではなく、
CSS、画像など様々なアセットを対象にしたフルコースみたいなものです。
ググるとわかりますが、様々な使い方やバージョン話の情報が出てくるためフィルタリングのコストがかかってしまうなという印象です。

このような理由で、ウェブサイト制作においてはRollupの軍配かな〜と思い今後の採用のために調査しています。

今回の記事では、 * babelを利用してJavaScript新しい記法をIE11にも対応するための設定 * Stimulus を動作させるための設定 をメモとして記載しています。

準備

  • Node.jsはv12.18.2
  • npmは7.5.4

という環境で検証を行っています。
npxというコマンドを利用しているので、npmだと5.2.0以上だとそのまま実行可能だと思います。

インストール

ウェブサイト作成を行うフォルダを適当に作成します。
次に

$npm install --save-dev rollup

これでrollupコマンドが利用できるようになります。

設定ファイルを書く

コマンドラインのオプションでファイルを変換することも可能なのですが、今回は設定ファイルを書いていきます。
現在いるフォルダに rollup.config.js という設定ファイルを作成します。

export default {
  input: 'src/main.js',
  output: {
    file: 'bundle.js',
    format: 'iife'
  }
};

実行は

$npx rollup -c

これでsrc/main.jsを変換してくれます。
formatの部分のiifeは即時関数という形式で出力してくれます。
ウェブ制作でブラウザで実行するという文脈では、この形式を使うでしょう。
基本的な使い方は以上で、後はbabelの設定などを追加していきます。

ES2015(ES6)記法をRollupでIE11に対応させる

babelを利用して変換を行うので、ライブラリを追加します。
また、babelにはPolyfillを追加する機能もあるので、その設定も行っていきます。
babelの7からはPolyfillの設定が少し変わったということで、それも考慮して反映していこうと思います。

$npm install --save-dev @rollup/plugin-babel @babel/core @babel/preset-env @rollup/plugin-node-resolve core-js@3 @rollup/plugin-commonjs

これを利用する設定をrollup.config.jsに追加

import { babel } from '@rollup/plugin-babel';
import commonjs from '@rollup/plugin-commonjs'; // requreでのモジュール呼び出しとかに対応する
import { nodeResolve } from '@rollup/plugin-node-resolve'; // node_modulesからライブラリをimportするために対応

export default {
  input: 'src/main.js',
  output: {
    file: 'bundle.js',
    format: 'iife'
  },
  plugins: [
    nodeResolve({ browser: true }), // commonjs()の前に
    commonjs(), // こっちをbabel()の前に
    babel({ babelHelpers: 'bundled' })
  ]
};

.babelrcを追加

{
  presets: [
    ["@babel/preset-env", {
       useBuiltIns: "usage",
       corejs: 3 // or 2
    }]
  ]
}

.browserslistrcを追加

ie 11

これで、ES2015記法のJavaScriptをIE11対応へ変換できます。
また対応できてない関数も自動的にoutputに含んでくれます。 実際にinputのsrc/main.jsにテストファイルを置いてみましょう。

window.addEventListener('DOMContentLoaded', () => {
  const hoge = () => {
    console.log('hoge')
  }
  hoge()

  const ary = (new Array(10)).fill(false)
  console.log(ary)
});

constやアロー関数を含んだjsファイルを変換します。 Arrayに対してfillを行っている部分はIE11だと非対応の部分です
rollupを実行するコマンドは以下です。

$npx rollup -c

アウトプットのファイルはbundle.jsなのですが、しっかり変換とPolyfillの追加が行われてそうですね。

https://github.com/Islands5/rollup-sample/blob/main/bundle.js#L702
https://github.com/Islands5/rollup-sample/blob/main/bundle.js#L692

これだけでもだいぶ嬉しい!!

Stimulus の対応

先程の設定がベースになります。
ちょっとしたトリッキーなページに Stimulus を利用したりするのでその設定をしてみようかなと思います。
最終的な設定はこちら

rollup関連で何かやりたいときは、npmのプラグインのページを見るとよさそうなので、他のライブラリを利用する際は検索してみてください https://www.npmjs.com/package/rollup-plugin-stimulus

必要なパッケージをインストールします

$ npm install --save-dev rollup-plugin-stimulus stimulus

その後、各種設定を行います。
rollup.config.jsはこちら

import { babel } from '@rollup/plugin-babel';
import commonjs from '@rollup/plugin-commonjs'; // requreでのモジュール呼び出しとかに対応する
import { nodeResolve } from '@rollup/plugin-node-resolve'; // node_modulesからライブラリをimportするために対応
import stimulusPlugin from 'rollup-plugin-stimulus';

export default {
  input: 'src/main.js',
  output: {
    file: 'bundle.js',
    format: 'iife',
    sourcemap: false
  },
  plugins: [
    stimulusPlugin({
      basePath: './src/controllers',
      importName: 'stimulus-controllers',
      showWarnings: false,
    }),
    nodeResolve({ browser: true }), // commonjs()の前に
    commonjs(), // こっちをbabel()の前に
    babel({ babelHelpers: 'bundled' })
  ]
};

あとはsrc/main.jsを中心にStimulus使うファイルを追加していきます。
https://stimulus.hotwire.dev/handbook/hello-stimulus#it-all-starts-with-html

実際にコンパイルするだけ
(2021年2月現在では、bundle.jsを出力する際にsourcemapに関するエラーが出るのですが、動作はするようです...ただ不安w)

今後も様々なライブラリの利用法を適宜更新していこうと思います。

以上!

参考