設定ファイルを用意せずにビルド環境を作成できるツール「Parcel」を使ってみます。
設定方法
コマンドラインでプロジェクトディレクトリに移動後、package.jsonを作成します。
npm init -y
Parcelをインストールします。
npm install --save-dev parcel
日本語のドキュメントだとパッケージ名が「parcel-bundler」になっていますが、現在は「parcel」が正しいようです。
次にpackage.jsonを変更します。
{ 〜 略 〜 "source": "src/index.html", "targets": { "default": { "distDir": "./htdocs" } }, "scripts": { "start": "parcel --open", "build": "parcel build" }, 〜 略 〜 }
変更点は “main”: “index.js”, の行の削除と”scripts”内の変更、”source”と”targets”の項目の追加になります。
scriptsでは開発サーバの起動とビルドのコマンドを設定、sourceではエントリーファイルの設定、targetsではビルド先の設定を行なっています。
プロジェクトディレクトリ内にsrcディレクトリを作成して、開発用のファイルを設置します。
src/index.html
<!doctype html> <html lang="ja"> <head> <meta charset="utf-8"> <title>サンプルページ</title> <link rel="stylesheet" href="css/style.css"> </head> <body> <h1>サンプルページ</h1> <div class="img"> <img src="img/img01.jpg" alt=""> </div> <script src="js/script.js"></script> </body> </html>
src/css/style.css
h1 { color: red; }
src/js/script.js
console.log('sample');
package.json内で設定しましたが、src/index.htmlがエントリーファイルになります。
これで開発用ファイルの準備ができたので、開発サーバを起動してみます。
npm run start
distディレクトリが生成され、http://localhost:1234 でサンプルページが開けばOKです。
distディレクトリ内のファイルが開発サーバで閲覧しているファイルになります。
次にビルドのコマンドを実行してみます。
npm run build
htdocsディレクトリが生成され、その中に各ファイルが生成されました。
htdocsはpackage.jsonのtargetsで設定したディレクトリ名で、設定しなかった場合は開発サーバと同じdistになります。
Parcelでビルドしたデモページ(ファイルパスは変更しています)
ビルド時の圧縮やsourcemapの設定を変更してみます。
{ 〜 略 〜 "source": "src/index.html", "targets": { "default": { "distDir": "./htdocs", "optimize": false, "sourceMap": false } }, "scripts": { "start": "parcel --open", "build": "parcel build" }, 〜 略 〜 }
ビルドコマンドを実行します。
npm run build
先ほど変わって各ファイル非圧縮状態で生成され、sourcemapファイルは生成されませんでした。
Parcelでビルドしたデモページ02(ファイルパスは変更しています)
Pug/Sass/TypeScriptのビルド
次はPugとSass、TypeScriptを元にビルドを行ってみます。
まずpackage.json内で設定したエントリーファイルをindex.htmlからindex.pugに変更します。
{ 〜 略 〜 "source": "src/index.pug", "targets": { "default": { "distDir": "./htdocs" } }, "scripts": { "start": "parcel --open", "build": "parcel build" }, 〜 略 〜 }
次にsrcディレクトリ内の開発ファイルを変更します。
imgディレクトリ以外を削除して、以下ファイルを設置していきます。
src/index.pug
doctype html html(lang="ja") head meta(charset="utf-8") title サンプルページ link(rel="stylesheet" href="css/style.scss") body h1 サンプルページ div.img img(src="img/img01.jpg" alt="") script(type="module" src="js/script.ts")
src/css/style.scss
@use "main/img";
src/css/main/_img.scss
.img { width: 600px; img { width: 100%; height: auto; } }
src/js/script.ts
import {hello} from './sub'; let message: string; message = hello('Miku'); console.log(message);
src/js/sub.ts
export function hello(user: string): string { return 'Hello, ' + user; }
これでファイルの準備ができたので、ビルドコマンドを実行します。
npm run build
先ほどと同様、htdocsディレクトリ内にファイルが生成されました。
Parcelでビルドしたデモページ03(ファイルパスは変更しています)
コメントが承認されるまで時間がかかります。