Vuetify, da Webpack a Vite

Dec 08 2022
Una guida passo passo su come migrare il tuo progetto Vue2 con Vuetify da Webpack a Vite
Ho molti progetti legacy scritti in Vue2. E quale libreria di stili utilizzo? Vuetify ovviamente.

Ho molti progetti legacy scritti in Vue2. E quale libreria di stili utilizzo? Vuetify ovviamente.

Questo articolo è progettato per aiutarti a sfruttare il potere di Vite. Perché, anche se disponi di codice legacy, ti meriti tempi di sviluppo rapidi.

Se non è necessario supportare i browser meno recenti. Se vuoi velocizzare le tue build di sviluppo. Se vuoi un'esperienza complessivamente migliore. Potresti dare un'occhiata a Vite.

Vite ha funzionalità simili a Webpack. Raggruppa e compila il tuo codice da componenti a file singolo e dattiloscritto a JavaScript vanilla.

Se fa lo stesso perché dovrei usarlo?

Semplice. I fasci prodotti da Vite sono più piccoli. In pratica questo significa 2 cose:

  1. Maggiore velocità di sviluppo. Poiché deve produrre meno codice, transpile più velocemente.
  2. Maggiore velocità di caricamento del browser. I pacchetti più piccoli si caricano più velocemente.

Disclaimer

  • Prima di tuffarci in Vite. Devi sapere che NON supporta i browser meno recenti.

Rimozione babele

Sul tuo package.json rimuovi tutto ciò che riguarda babel in questo modo:

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

Fatto ciò rimuoviamo le librerie relative al Webpack.

Rimozione di Webpack

Sul tuo package.json rimuovi:

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

Webpack e Babel rimossi. Adesso. Aggiungiamo Vite.

Aggiunta Vite

Installa viteed vite-plugin-vue2eseguendo:

npm install -D vite vite-plugin-vue2

Riordinare i file

Vite è un po' supponente riguardo alla struttura dei file del nostro progetto. Dovremo cambiare le directory dei nostri file statici.

Tutto ciò che era nella cartella pubblica, portalo nella directory principale.

Quel "tutto" a cui mi riferisco di solito è:

  • indice.html
  • favicon.ico

Modifiche al file index.html

Se apri il tuo index.html troverai qualcosa di simile a questo:

<!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>

In altre parole. Tutto ciò <%...%>che deve andare.

Fatto ciò dovremmo avere qualcosa del genere:

<!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>

Aggiunta delle configurazioni Vite

In modo simile a come aggiungiamo configurazioni a Webpack, dobbiamo farlo con Vite.

Un semplice file di configurazione:

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"),
    },
  },
});

Primo. Importiamo le dipendenze di cui abbiamo bisogno.

import { defineConfig } from "vite"

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

import path from "path";

Ora passiamo alle cose difficili.

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

plugins: [vue()],

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

Aggiungi script Vite

Dobbiamo anche aggiornare i nostri script. Da questo:

"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"
},

La nostra configurazione finora non funzionerà con Vuetify. Abbiamo bisogno di alcune modifiche speciali per farlo.

Passaggio aggiuntivo

Da ora in poi. Ogni volta che importiamo un Single File Component (SFC) è necessario includere l'estensione.

Quando prima potevamo fare questo:

import HelloWorld from '@/components/HelloWorld';

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

Affinché Eslint funzioni correttamente con Vite, è necessario regolare alcune impostazioni. Se non lo usi sentiti libero di saltare questa sezione.

La solita configurazione babel/eslint è qualcosa del genere:

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

  1. envNell'opzione vai node: trueda a es2021: true.
  2. Rimuovi completamente il file parserOptions.

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

Dobbiamo installare il seguente pacchetto per elaborare Vuetify con Vite .

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"),
    },
  },
});

Conclusioni

  • La migrazione da Webpack a Vite non è un grosso problema. Tuttavia, vale la pena aumentare la velocità.
  • Non abbiamo più bisogno di Babel.
  • Vite è supponente riguardo alle posizioni dei file.
  • Vuetify richiede configurazioni speciali.