Migração e Modernização de Projetos Vue 2.x para a Versão 2.7

A atualização para o Vue 2.7 representa um marco importante para aplicações legadas. Esta versão traz nativamente recursos do Vue 3, como a Composition API e o suporte a <script setup>, sem a necessiadde de migrar toda a arquitetura para o ecossistema Vue 3 imediatamente. Além disso, facilita a introdução progressiva de TypeScript no código-fonte.

Ajustes nas Dependências

Para iniciar a transição, é necessário atualizar o núcleo do framework e ajustar as ferramentas de build. Uma mudança fundamental é a remoção do vue-template-compiler, cujas funções foram integradas ao próprio pacote do Vue na versão 2.7.

// Alterações recomendadas no package.json
{
  "dependencies": {
    "vue": "^2.7.10",
    "vue-demi": "^0.13.11" // Auxilia na compatibilidade entre versões
  },
  "devDependencies": {
    "vue-loader": "^15.10.0", 
    "eslint-plugin-vue": "^9.0.0" // Necessário para reconhecer a sintaxe setup
  }
}

Refatoração do Vuex com Composition API

Em versões anteriores, era comum o uso extensivo de mapState e mapActions dentro de methods e computed. Com o Vue 2.7, podemos acessar o store de forma mais direta dentro do ciclo de vida da Composition API.

import { computed } from 'vue';
import store from '@/store';

export default {
  setup() {
    // Acesso reativo ao estado
    const userData = computed(() => store.state.user.profile);
    
    // Execução de ações e mutações
    const updateProfile = (payload) => store.dispatch('user/updateProfile', payload);
    const logout = () => store.commit('user/CLEAR_SESSION');

    return {
      userData,
      updateProfile,
      logout
    };
  }
};

Integração com TypeScript

Para adicionar tipagem estática ao projeto, é preciso configurar o compilador e o carregador do Webpack para interpretar arquivos .ts e blocos de script tipados dentro de arquivos .vue.

1. Instalação de pacotes auxiliares

npm install typescript@4.8.4 ts-loader@~5.0.0 @vue/cli-plugin-typescript -D

2. Configuração do tsconfig.json

Este arquivo define como o TypeScript deve processar o código e resolver os caminhos do projeto:

{
  "compilerOptions": {
    "target": "esnext",
    "module": "esnext",
    "strict": true,
    "jsx": "preserve",
    "moduleResolution": "node",
    "allowJs": true,
    "esModuleInterop": true,
    "baseUrl": ".",
    "paths": {
      "@/*": ["src/*"]
    },
    "lib": ["esnext", "dom", "dom.iterable"]
  },
  "include": ["src/**/*.ts", "src/**/*.vue"]
}

3. Ajuste no Webpack

É necessário informar ao Webpack como lidar com a extensão TypeScript, garantindo que o ts-loader processe corretamente os arquivos SFC (Single File Components):

// webpack.config.js ou configuração do vue.config.js
module.exports = {
  resolve: {
    extensions: ['.ts', '.js', '.vue', '.json']
  },
  module: {
    rules: [
      {
        test: /\.tsx?$/,
        loader: 'ts-loader',
        options: { 
          appendTsSuffixTo: [/\.vue$/] 
        },
        exclude: /node_modules/
      }
    ]
  }
};

Configuração do Linter para TS

Se o projeto utiliza ESLint, a análise estática pode falhar ao encontrar sintaxe TypeScript dentro de arquivos Vue. Para resolver isso, deve-se alterar o parser no arquivo .eslintrc.js:

module.exports = {
  parserOptions: {
    parser: '@typescript-eslint/parser'
  },
  plugins: ['@typescript-eslint'],
  extends: [
    'plugin:vue/recommended',
    'eslint:recommended',
    'plugin:@typescript-eslint/recommended'
  ]
};

Ao concluir essas etapas, o ambiente estará pronto para utilizar os hooks do Vue 2.7 e usufruir dos benefícios de produtividade da nova API de composição, mantendo a estabilidade da base de código legada.

Tags: Vue.js vue-2.7 TypeScript composition-api webpack

Publicado em 6-7 02:21 por Thomas