遅ればせながら Parcel を使ってみた

Webpack のような設定ファイルを一切置かず、ES2015・SCSS などをトランスパイルできる Parcel というツールを使ってみた。

Node.js v10.7.0・npm v6.1.0 をインストールした MacOS HighSierra 環境でお試しした。

まずは素振り環境をサクサクっと作っていく。

# 作業用ディレクトリを作りそこに移動する
$ mkdir parcel-practice && cd $_

# Git 管理しておく (任意)
$ git init
$ git commit --allow-empty -m "Init"

# package.json を生成する
$ npm init -y

# Parcel をローカルインストールする・本稿執筆時点では v1.9.7 がインストールされた
$ npm i -D parcel-bundler

# 作業用ファイルを作成する
$ touch index.html
$ touch index.js
$ touch index.scss

とりあえずこんな感じ。次に index.html から index.js を読み込むように書いておく。

<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="UTF-8">
    <title>Parcel Practice</title>
    <script src="index.js"></script>
  </head>
  <body>
    <p>Lorem ipsum</p>
  </body>
</html>

そしたら index.js を開いて、ココから index.scss をインポートするように書いておく。インポート以降は ES2015 コードを書いたりしても良い。

// index.scss を読み込む
import './index.scss';

// 何か処理とか…
document.addEventListener('DOMContentLoaded', () => {
  console.log('DOMContentLoaded!')
});

最後に index.scss が読み込まれているか分かるよう、適当にスタイルを書いておく。

// index.scss

body {
  background: #ddd;
  
  p {
    color: #f0f;
  }
}

コレでファイルの準備は完了。いよいよ Parcel を実行する。

$ npx parcel index.html --open

npx を使うと、ローカルインストールしてあるパッケージのコマンドが使える。package.jsonscripts"parcel": "parcel" と定義して、npm run parcel と叩く必要はもうない。

デフォルトでは http://localhost:1234/ で簡易サーバが立ち上がり、指定されたエントリポイントである index.html を解析して index.jsindex.scss を探し出し、それぞれのファイルの形式に合わせて ES2015 や SCSS をトランスパイルしてくれる。トランスパイルした成果物は dist/ ディレクトリ配下に置かれる他、.cache/ ディレクトリもひっそりできているので、.gitignore で無視するのをお忘れなきよう。

初回だけは必要なトランスパイルライブラリをダウンロードしたりしているのか、少々時間がかかる。SASS / SCSS があると、package.json に勝手に node-sass が増えた。参考文献によれば、typescript パッケージを入れておけば TypeScript もトランスパイルしてくれるようだ。

当然のように Watch 機能も付いているので、エントリポイントから参照できるファイル (ココでは index.htmlindex.jsindex.scss の3つ) を修正して保存すると、即座にブラウザに反映してくれる。

「なんたら Config」みたいなファイルは一切なく、勝手にココまでやってくれて素晴らしい。本番向けビルドまで完結させるような使い方は難しいかもしれないが、素振り環境として、個人で作るレベルなら全く問題なさそう。