🌊

create-react-appを使わないReact、さようならWebpackこんにちはVite

2023/03/16に公開

はじめに

前回create-react-appを使わないReactにESLintとPrettier入れた。

https://zenn.dev/kekezun/articles/65cd0fb69896c1

プロジェクトが小さい内はWebpackでも気にならないが、肥大化してくるとビルドに時間がかかって面倒なので、WebpackからViteに乗り換える。

成果物はこちら。
https://github.com/kkznch/template-react-for-inspection/tree/04-change-bundler-to-vite

環境

  • vite: v4.1.4

※ 今回追加する主となるパッケージのバージョンのみ記載

手順

Webpackのアンインストールと設定ファイル削除

さようならWebpack。

$ yarn remove webpack webpack-cli webpack-dev-server html-webpack-plugin
$ rm webpack.config.js

Viteのインストール

こんにちはVite。

$ yarn add --dev vite @vitejs/plugin-react @types/node

Vite設定ファイルを作成する

vite.config.ts
import { resolve } from 'path';
import react from '@vitejs/plugin-react';
// eslint-disable-next-line import/namespace
import { defineConfig } from 'vite';

export default defineConfig({
  plugins: [react()],
  resolve: {
    alias: {
      '@': resolve(__dirname, './src'),
    },
  },
});

eslint-disable-next-line import/namespace を指定しているのは、viteをインポートする箇所で下記のエラーが発生するのを回避するため。他に回避方法があれば教えていただきたい。

Parse errors in imported module 'vite': parserPath is required

package.jsonを修正する

Viteは型チェックまではしてくれないので、そこはtscを使ってチェックする。

package.json
  "scripts": {
-    "start": "webpack-dev-server .",
-    "build": "webpack .",  
+    "dev": "vite",
+    "build": "tsc --noEmit && vite build",
    "lint": "eslint .",
    "lint:fix": "eslint --fix .",
    "format": "prettier --write \"src/**/*.{ts,tsx}\""
  },

index.htmlを移動し、修正する

Viteはエントリポイントとなる index.html をプロジェクト直下に意図的に配置しているらしい。それに合わせるため、 public/index.html ファイルを index.html (プロジェクト直下)に移動し、下記のように追記する。

index.html
<html lang='ja'>
  <head>
    <meta charset='UTF-8'>
    <title>React app</title>
  </head>
  <body>
    <div id='root'></div>
+    <script type="module" src="./src/index.tsx"></script>
  </body>
</html>

実行

$ yarn dev

おわりに

Viteは設定ファイルに記述する量が少なく、ビルド時間もWebpackと比べて早くて良い。

参考

https://ja.vitejs.dev/

Discussion