Parcelでの使用(Bootstrap and Parcel) v5.0.0新設 v5.3.0更新
Parcelを使用してBootstrapのCSSとJavaScriptをプロジェクトに組み込みバンドルする方法の公式ガイド。
※"v5.0.0"での変更はv5.0.0-alpha版、v5.0.0-beta版での変更も含みます。
※"v5.3.0"での変更はv5.3.0-alpha版での変更も含みます。
セットアップ(Setup)
Bootstrapを使用してParcelプロジェクトをゼロから構築しているため、実際に始める前に、いくつかの前提条件と前段階がある。このガイドでは、既にNode.jsがインストールされており、ある程度ターミナル(コマンドプロンプト)に精通している必要がある。
-
プロジェクトフォルダを作成し、npmをセットアップ。
my-project
フォルダを作成し、npmを-y
引数で初期化して、すべてのインタラクティブな質問を回避する。実行コマンド
$ mkdir my-project && cd my-project $ npm init -y
-
Parcelをインストール。webpackガイドとは異なり、ここでは構築ツールの依存関係は1つしかない。Parcelは、言語トランスフォーマー(Sassなど)を検出すると、それらを自動的にインストールする。
--save-dev
を使用して、この依存関係が開発用であり、本番用ではないことを通知する。実行コマンド
$ npm i --save-dev parcel
-
Bootstrapをインストール。これで、Bootstrapがインストールできる。ドロップダウン、ポップオーバー、ツールチップはPopperに依存しているため、Popper(
@popperjs/core
)もインストールする。これらのコンポーネントを使用する予定がない場合は、ここでPopperを省略しても可。実行コマンド
$ npm i --save bootstrap @popperjs/core
必要なすべての依存関係がインストールとセットアップされれば、プロジェクトファイルの作成とBootstrapのインポートに取り掛かることができる。
プロジェクト構造(Project structure)
my-project
フォルダを作成し、npmを初期化した。次に、src
フォルダも作成して、プロジェクト構造を完成させる。my-project
から以下を実行するか、以下に示すフォルダとファイル構造を手動で作成する。
実行コマンド$ mkdir {src,src/js,src/scss}
$ touch src/index.html src/js/main.js src/scss/styles.scss
完了すると、プロジェクト全体は以下のようになる。
my-project/
├── src/
│ ├── js/
│ │ └── main.js
│ ├── scss/
│ │ └── styles.scss
│ └── index.html
├── package-lock.json
└── package.json
この時点で、すべてが適切な場所にあるが、Parcelはサーバーを起動するためにHTMLページとnpmスクリプトを必要とする。
Parcelを構成する(Configure Parcel)
依存関係がインストールされ、プロジェクトフォルダでコーディングを開始できるようになったら、Parcelを構成して、プロジェクトをローカルで実行できる。Parcel自体は設計上構成ファイルを必要としないが、サーバーを起動するにはnpmスクリプトとHTMLファイルが必要。
-
src/index.html
ファイルを作成。Parcelにはレンダリングするページが必要なので、index.html
ページを使用して、CSSファイルやJavaScriptファイルなどの基本的なHTMLを設定する。src/index.html
の設定例<!doctype html> <html lang="ja"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Parcel付きBootstrap</title> <link rel="stylesheet" href="scss/styles.scss"> <script type="module" src="js/main.js"></script> </head> <body> <div class="container py-4 px-3 mx-auto"> <h1>Hello, Bootstrap and Parcel!</h1> <button class="btn btn-primary">Primary button</button> </div> </body> </html>
上記では、BootstrapのCSSがParcelによって読み込まれるタイミングが確認できるように、
div class="container"
と<button>
を使用したBootstrapのスタイルを少しだけ入れている。Parcelは、Sassを使用していることを自動的に検出し、それをサポートするためにSass Parcelプラグインをインストールする。ただし、必要に応じて
npm i --save-dev @parcel/transformer-sass
を手動で実行することもできる。 -
Parcel npmスクリプトを追加。
package.json
を開き、以下のstart
スクリプトをscripts
オブジェクトに追加する。このスクリプトを使用して、Parcel開発サーバーを起動し、dist
ディレクトリにコンパイルした後に作成したHTMLファイルをレンダリングする。package.json
の設定例{ // ... "scripts": { "start": "parcel serve src/index.html --public-url / --dist-dir dist", "test": "echo \"Error: no test specified\" && exit 1" }, // ... }
-
そして最後に、Parcelを起動。ターミナルの
my-project
フォルダから、新しく追加されたnpmスクリプトを実行:実行コマンド
$ npm start
このガイドの次が最後となる項目では、Parcelローダーをセットアップし、BootstrapのCSSとJavaScriptをすべてインポートする。
Bootstrapのインポート(Import Bootstrap)v5.3.0更新
BootstrapをParcelにインポートするには、2つのインポートが必要。1つは styles.scss
に、もう1つは main.js
にインポート。
-
BootstrapのCSSをインポート。以下を
src/scss/styles.scss
に追加して、BootstrapのすべてのソースSassをインポート。src/scss/styles.scss
の設定例 緑背景が5.3.0での変更箇所// BootstrapのCSSをすべてインポート @import "bootstrap/scss/bootstrap";
必要に応じて、スタイルシートを個別にインポートすることもできる。詳細については、Sassカスタマイズのインポートの項目に記載。
-
BootstrapのJSをインポート。以下を
src/js/main.js
に追加して、CSSをロードし、BootstrapのすべてのJSをインポート。PopperはBootstrapを介して自動的にインポートされる。src/js/main.js
の設定例全てをインポート
// BootstrapのJSをすべてインポート import * as bootstrap from 'bootstrap'
バンドルサイズを抑えるために、必要に応じてJavaScriptプラグインを個別にインポートすることもできる。
個別にインポート
import Alert from 'bootstrap/js/dist/alert' // または、必要なプラグインを指定: import { Tooltip, Toast, Popover } from 'bootstrap'
Bootstrapのプラグインの使用方法の詳細については、JavaScriptの解説に記載。
-
これで完了!🎉BootstrapのソースSassとJSが完全に読み込まれると、ローカル開発サーバーは次のようになる:
これで、使用するBootstrapコンポーネントの追加が始められる。追加のカスタムSassを組み込み、BootstrapのCSSとJSの必要な部分のみをインポートして構築を最適化する方法については、完全なParcelサンプルプロジェクトを必ずチェックして下さい。
【変更履歴】
- 【v5.2.0】
- ガイドを全面的に書き直して更新
- 設定方法がParcel2に対応
- 【v5.3.0】
src/scss/styles.scss
の設定:@import "~bootstrap/scss/bootstrap";
⇒@import "bootstrap/scss/bootstrap";
ここで何か間違いがあったり、情報が古くなっていたら、GitHubのIssuesを開いてご指摘下さい。トラブルシューティングのサポートが必要なら、GitHubで検索するか、ディスカッションを始めて下さい。