Vuetify、Webpack から Vite へ

Dec 08 2022
Vue2 with Vuetify プロジェクトを Webpack から Vite に移行する方法のステップバイステップ ガイド
Vue2 で記述された多くのレガシー プロジェクトがあります。そして、私が使用するスタイルライブラリは何ですか? もちろんVuetify。

Vue2 で記述された多くのレガシー プロジェクトがあります。そして、私が使用するスタイルライブラリは何ですか? もちろんVuetify。

この記事は、Vite のパワーを活用できるように設計されています。レガシ コードを使用している場合でも、開発時間を短縮する必要があるからです。

古いブラウザをサポートする必要がない場合。開発ビルドをスピードアップしたい場合。全体的により良い体験が必要な場合。Vite をご覧になることをお勧めします。

Vite は Webpack と同様の機能を備えています。単一ファイル コンポーネントと Typescript からバニラ JavaScript まで、コードをバンドルしてコンパイルします。

それが同じなら、なぜ私はそれを使いたいのですか?

単純。Vite によって生成されるバンドルは小さくなります。実際には、これは次の 2 つのことを意味します。

  1. 開発スピードが速い。より少ないコードを生成する必要があるため、トランスパイルが高速になります。
  2. ブラウザの読み込み速度が速くなります。バンドルが小さいほど、読み込みが速くなります。

免責事項

  • Vite に飛び込む前に。古いブラウザをサポートしていないことを知っておく必要があります。

バベルを取り除く

package.jsonで、次のようにすべてのバベル関連を削除します。

"@babel/core": "...",
"@babel/eslint-parser": "...",
"@vue/cli-plugin-babel": "...",

完了したら、Webpack 関連のライブラリを削除しましょう。

Webpack の削除

package.jsonで以下を削除します。

"@vue/cli-plugin-eslint": "...",
"@vue/cli-plugin-router": "...",
"@vue/cli-plugin-unit-jest": "...",
"@vue/cli-plugin-vuex": "...",
"@vue/cli-service": "...",

Webpack と Babel が削除されました。今。Viteを追加しましょう。

バイトの追加

以下を実行してインストールviteします。vite-plugin-vue2

npm install -D vite vite-plugin-vue2

ファイルの並べ替え

Vite は、私たちのプロジェクトのファイル構造に少しこだわりがあります。静的ファイルのディレクトリを変更する必要があります。

パブリック フォルダーにあったすべてのものを、ルート ディレクトリに取り出します。

私が通常言及している「すべて」とは、次のようなものです。

  • index.html
  • favicon.ico

index.html ファイルへの変更

index.htmlを開くと、次のような内容が表示されます。

<!DOCTYPE html>
<html lang="">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <link rel="icon" href="<%= BASE_URL %>favicon.ico">
    <title><%= htmlWebpackPlugin.options.title %></title>
  </head>
  <body>
    <noscript>
      <strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
    </noscript>
    <div id="app"></div>
    <!-- built files will be auto injected -->
  </body>
</html>

言い換えると。すべてが<%...%>行く必要があります。

それが完了すると、次のようになります。

<!DOCTYPE html>
<html lang="">
  <head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width,initial-scale=1.0" />
    <link rel="icon" href="./favicon.ico" />
    <title>Admin</title>
    <script type="module" src="/src/main.js" defer></script>
  </head>
  <body>
    <noscript>
      <strong
        >We're sorry but the admin doesn't work properly without JavaScript
        enabled. Please enable it to continue.</strong
      >
    </noscript>
    <div id="app"></div>
    <!-- built files will be auto injected -->
  </body>
</html>

<script type="module" src="/src/main.js" defer></script>

Vite 構成の追加

Webpack に構成を追加する方法と同様に、Vite でそれを行う必要があります。

簡単な設定ファイル:

import { defineConfig } from "vite";
import { createVuePlugin as vue } from "vite-plugin-vue2";
import path from "path";

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

初め。必要な依存関係をインポートします。

import { defineConfig } from "vite"

import { createVuePlugin as vue } from "vite-plugin-vue2";

import path from "path";

今から難しいものに。

export default defineConfig({
  plugins: [vue()],
  resolve: {
    alias: {
      "@": path.resolve(path.dirname(''), "./src"),
    },
  },
});

plugins: [vue()],

resolve: {
  alias: {
    "@": path.resolve(path.dirname(''), "./src"),
  },
},

Vite スクリプトを追加する

また、スクリプトを更新する必要があります。これから:

"scripts": {
  "serve": "vue-cli-service serve",
  "build": "vue-cli-service build",
  "lint": "vue-cli-service lint"
},

"scripts": {
  "dev": "vite",
  "build": "vite build",
  "serve": "vite preview",
  "lint": "eslint --ext .js,.vue --ignore-path .gitignore --fix src"
},

これまでの構成は Vuetify では機能しません。これを行うには、いくつかの特別な調整が必要です。

追加のステップ

今後。単一ファイル コンポーネント (SFC) をインポートするときは常に、拡張子を含める必要があります。

これを行う前に:

import HelloWorld from '@/components/HelloWorld';

import HelloWorld from '@/components/HelloWorld.vue';

Eslint が Vite で正しく動作するには、いくつかの設定を調整する必要があります。使用しない場合は、このセクションにジャンプしてください。

通常のbabel/eslint設定は次のようなものです:

{
  "root": true,
  "env": {
    "node": true
  },
  "extends": [
    "plugin:vue/essential",
    "eslint:recommended"
  ],
  "parserOptions": {
    "parser": "@babel/eslint-parser"
  },
  "rules": {}
}

  1. envオプションで からnode: trueに移動しes2021: trueます。
  2. を完全に取り除きますparserOptions

{
  "root": true,
  "env": {
    "es2021": true
  },
  "extends": [
    "plugin:vue/essential",
    "eslint:recommended"
  ],
  "rules": {}
}

Vite で Vuetify を処理するには、次のパッケージをインストールする必要があります。

npm install -D unplugin-vue-components

import { defineConfig } from "vite";
import { createVuePlugin as vue } from "vite-plugin-vue2";
import { VuetifyResolver } from "unplugin-vue-components/resolvers";
import Components from "unplugin-vue-components/vite";
import path from "path";

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [
    vue(),
    Components({
      resolvers: [
        // Vuetify
        VuetifyResolver(),
      ],
    }),
  ],
  resolve: {
    alias: {
      "@": path.resolve(__dirname, "./src"),
    },
  },
});

結論

  • Webpack から Vite への移行はそれほど面倒ではありません。ただし、速度の向上はそれだけの価値があります。
  • Babelはもう必要ありません。
  • Vite は、ファイルの場所に関して独自の意見を持っています。
  • Vuetify には特別な構成が必要です。