ViteでtailwindcssとバニラJavaScriptの開発環境をつくる 2022.09.26
Viteが気になっていたので、静的サイト制作に使えるかどうか試してみた。
Viteプロジェクトの生成
まず、公式の「最初の vite プロジェクトを生成する」を完了させる。
% npm create vite@latest
✔ Project name: … vite-vanilla-tailwindcss
✔ Select a framework: › Vanilla
✔ Select a variant: › JavaScript
Scaffolding project in /Users/xxx/vite-vanilla-tailwindcss...
Done. Now run:
cd vite-vanilla-tailwindcss
npm install
npm run dev
% cd vite-vanilla-tailwindcss
以下のような構成を得る。publicディレクトリは開発サーバーでもビルドでもルートに配置される。
% tree
.
├── counter.js
├── index.html
├── javascript.svg
├── main.js
├── package.json
├── public
│ └── vite.svg
└── style.css
1 directory, 7 files
依存関係をインストール。
% npm install
最初のテンプレートは、バニラJSでReactやVueのようなUIフレームワーク風にDOMを構築するようなコードになっている。これを普通の静的サイトをコーディングするような形に変更する。
つまり、DOMはすべてHTMLファイルに寄せ、CSSとJavaSCriptをそれぞれ別にバンドルする。
せっかくなので、jQueryぐらいは入れておく。
% npm install jquery
変更後のindex.htmlは以下の通り。
- main.jsからDOMの部分を移動。
- main.jsでインポートしているスタイルをlink要素で読む込むようにする。
- javascript.svgをpublicディレクトリに移動してパスを修正。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<link rel="stylesheet" href="/style.css" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Vite App</title>
</head>
<body>
<div id="app">
<a href="https://vitejs.dev" target="_blank">
<img src="/vite.svg" class="logo" alt="Vite logo" />
</a>
<a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript" target="_blank">
<img src="/javascript.svg" class="logo vanilla" alt="JavaScript logo" />
</a>
<h1>Hello Vite!</h1>
<div class="card">
<button id="counter" type="button"></button>
</div>
<p class="read-the-docs">Click on the Vite logo to learn more</p>
</div>
<script type="module" src="/main.js"></script>
</body>
</html>
JavaScript のソースコードを参照している
<script type="module" src="...">
を解決します。インラインの<script type="module">
や<link href>
で参照される CSS も Vite 固有の機能を利用できます。
なんでも自動的に行われるので魔法のようで少し理解しにくい。Viteで処理すべきCSSやJavaScriptの存在は自動的に判定しているようだ。
今回のようにCSSファイルだけ書き出したいとき、Webpackであればmini-css-extract-pluginなどを利用するところだが、それに比べるとかなり簡単。
main.jsは以下の通り。適当。
import $ from 'jquery';
function main() {
let counter = 0;
const $button = $('#counter').text(`count is ${counter}`);
$button.on('click', () => {
$button.text(`count is ${++counter}`);
});
}
main();
画面の表示が変わっていないことと、HMRが効いていてスタイルを変更すると即時に反映されることを確認。
tailwindcssの導入
https://tailwindcss.com/docs/installation/using-postcss
% npm install -D tailwindcss postcss autoprefixer
% npx tailwindcss init
Created Tailwind CSS config file: tailwind.config.cjs
tailwind.config.cjsにエントリーポイントを指定。JavaScriptでスタイルを扱うことは今回はないのでHTMLファイルだけ指定。
/** @type {import('tailwindcss').Config} */
module.exports = {
content: ['./index.html'],
theme: {
extend: {},
},
plugins: [],
};
style.cssにtailwindcssのディレクティブを追加。Preflightを適用するとロゴの部分が崩れてしまうので今回は外した。
/* @tailwind base; */
@tailwind components;
@tailwind utilities;
これだけだとtailwindcssは動かないので、さらにpostcss.config.jsを追加。PostCSSの項目には以下のように書いてある。
もしプロジェクトに有効な PostCSS が含まれている場合 (postcss-load-config でサポートされている任意の形式、例: postcss.config.js)、インポートされたすべての CSS に自動的に適用されます。
tailwindcssは自動的に適用されるPostCSS経由で動いているようだ。
% touch postcss.config.js
module.exports = {
plugins: {
tailwindcss: {},
autoprefixer: {},
},
};
tailwindcssのクラスが使えるようになった。
<h1 class="text-6xl font-thin italic">Hello Vite!</h1>
% npm run build
> vite-vanilla-tailwindcss@0.0.0 build /Users/xxx/vite-vanilla-tailwindcss
> vite build
vite v3.1.1 building for production...
✓ 7 modules transformed.
dist/index.html 0.96 KiB
dist/assets/index.f2b9936c.css 1.29 KiB / gzip: 0.65 KiB
dist/assets/index.dd654aa2.js 89.28 KiB / gzip: 31.84 KiB
% npm run preview
> vite-vanilla-tailwindcss@0.0.0 preview /Users/xxx/vite-vanilla-tailwindcss
> vite preview
➜ Local: http://127.0.0.1:4173/
➜ Network: use --host to expose
ビルドタイムでも同じ結果であることを確認。
Viteを使ってtailwindcssとバニラJavaScriptの環境を構築することができた。