vue2老项目vite升级改造过程记录

目录
  • 前言
  • 背景
  • 改造过程
    • 保留webpack的选项
    • vite引入和配置
    • vite-plugins引入
    • require报错问题
    • 配置
  • 完整配置
  • 结束
  • 总结

前言

Vite是一种新型前端构建工具,能够显著提升前端开发体验。它主要由两部分组成:

Vite 意在提供开箱即用的配置,同时它的 插件 APIJavaScript API 带来了高度的可扩展性,并有完整的类型支持。

vite包含如下特点:

  • 光速启动
  • 热模块替换
  • 按需编译

本次在开发环境增加vite的启动方式,提升开发效率,在生产环境保持原有模式。

背景

本次改造的工程是公司内一个很重要,迭代维护了3年的老项目,随着项目代码量的逐渐增加,项目启动速度的速度越来越慢,已经严重影响了开发效率,启动时间接近2分钟。

该项目由@vue/cli 搭建的webpack模版,之前做过一次webpack3->的一次升级,现使用webpack4.x版本。

在搭建vite的过程中,理想状况是业务代码的0改动。

改造过程

保留webpack的选项

由于vite使用ES6 Module方式组织代码,index.html的导入方式不通,复制index.html->prod.html

并修改webpack HtmlWebpackPlugin插件的template(开发和生产配置会有不同,保留原有配置即可)

new HtmlWebpackPlugin({ template: 'prod.html', }),

vite引入和配置

安装

npm i vite --save-dev

并在根目录新建vite.config.js文件

import { defineConfig } from 'vite'
import path from 'path'
export default () => defineConfig({
      resolve: {
                extensions: ['.js', '.vue', '.json', '.less'],
                alias: {
                              vue: 'vue/dist/vue.esm.js',
                              '@': path.resolve(__dirname, 'src'),
                       }
                },
      server: {
                port: 8080, // vite默认是3000端口,保留原有的端口号
                proxy: {
                              '/api': {
                                               target: 'http://baidu.com/',
                                               changeOrigin: true,
                                               rewrite: path => path.replace(/^\/api/, '')
                                        }
                               }
                  }
          })

添加 packge.json 中 scripts 命令,并改变原有的webpack命令

{
  "scripts": {
        "dev": "vite" ,
          "dev:w": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js --profile"
       }
    }

修改 index.html中的入口文件导入方式

配置完后我们就可以尝试运行vite了

命令行输入npm run dev

运行后,我们可以看到很多报错,这么多错误信息如果手动修改的话,无疑是一项巨大的工程,而且这些改动没有任价值。针对vite 工程的改造,我们可以通过插件解决对应问题。

vite-plugins引入

虽然 vite 发展很快,npm 上面也陆陆续续有vite的插件更新,但是总有一些没有覆盖到的场景,官方的核心插件如下,我们的项目使用的是vue2版本的,所以用的是vite-plugin-vue2插件。

// vite.config.js
import { createVuePlugin } from 'vite-plugin-vue2'

export default {
  plugins: [
    createVuePlugin({
        jsx: true,
    })
  ],
}

针对这个场景,使用的是自己写了一个插件vite-plugin-vue2-jsx,将需要修改的处理,全部由插件来进行转化

使用 vite-plugin-vue2-jsx 替换 vite-plugin-vue2 ,自动处理

// vite.config.js
import { createVuePlugin } from 'vite-plugin-vue2-jsx'

export default {
  plugins: [
    createVuePlugin({
        jsx: true,
    })
  ],
}

require报错问题

这个问题vite是使用ESModule编译的,不支持CommonJs的原因,所以我们就需要将CommonJs 转换为ESModule。

项目中存在两种情况:

  • 图片require引用
<img class="logo" :src="require('./images/logo.png')"/>

在npm上找了半天也没找到我需要的插件,针对这个场景,索性自己写了一个插件vite-plugin-image-require

// vite.config.js
import { imageRequirePlugin } from 'vite-plugin-image-require'

export default {
  plugins: [
    imageRequirePlugin()
  ],
}

2. 枚举的引用

通过引入 vite-plugin-require-transform 插件来处理

npm i vite-plugin-require-transform --save-dev

配置

import requireTransform from 'vite-plugin-require-transform';

export default defineConfig({
  plugins: [
    requireTransform({fileRegex:/.js$|.vue$/}),
  ],
});

转换 @import ~ 别名

resolve: {
    alias: {
      '~': path.join(__dirname, 'node_modules'),
    }
  },

webpack的 process.env 的环境变量在项目中的使用导致的页面报错,无法加载

define: {
    'process.env': process.env
},

完整配置

import { defineConfig } from 'vite'
import { imageRequirePlugin } from 'vite-plugin-image-require'
import { createVuePlugin } from 'vite-plugin-vue2-jsx'
import requireTransform from 'vite-plugin-require-transform';
import path from 'path'

export default () => defineConfig({
    define: {
        'process.env': process.env
    },
    plugins: [
        createVuePlugin({
            jsx: true,
        }),
        requireTransform({
            fileRegex:/.js$|.vue$/
        }),
        imageRequirePlugin(),
    ],
    resolve: {
        extensions: ['.js', '.vue', '.json', '.less'],
        alias: {
            vue: 'vue/dist/vue.esm.js',
            '@': path.resolve(__dirname, 'src'),
            '~': path.join(__dirname, 'node_modules'),
        }
    },
    server: {
        port: 8080, // vite默认是3000端口,保留原有的端口号
        proxy: {
            '/api': {
                target: 'http://baidu.com/',
                changeOrigin: true,
                rewrite: path => path.replace(/^/api/, '')
            }
        }
    }
})

结束

# 使用vite启动服务
npm run dev

# 使用webpack启动服务
npm run dev:w

总结

到此这篇关于vue2老项目vite升级改造的文章就介绍到这了,更多相关vue2老项目vite升级内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Vue3从0搭建Vite打包组件库使用详解

    目录 打包配置 声明文件 打包配置 本篇文章将介绍如何使用 vite 打包我们的组件库,同时告诉大家如何使用插件让打包后的文件自动生成声明文件(*.d.ts) vite 专门提供了库模式的打包方式,配置其实非常简单,首先全局安装 vite 以及@vitejs/plugin-vue pnpm add vite @vitejs/plugin-vue -D -w 在 components 文件下新建vite.config.ts配置文件 import { defineConfig } from "vit

  • Vue3中Vite和Vue-cli的特点与区别详解

    目录 1. 创建3.0项目 Vite 与 Vue-cli 是什么? Vue-cli 的特点: Vite 的特点: Vite 和 Vue-cli的区别: 总结: 1. 创建3.0项目 vue-cli : 安装并执行 npm init vue@latest 选择项目功能时: 除了第一项的项目名字外,其他可以暂时No cd title npm install npm run dev :运行 npm run build: 打包 (生成一个dist文件夹) vite: 使用vite 体验更快速 npm i

  • vue vite之LogicFlow安装核心依赖及项目初始化详解

    目录 推荐几个好用的工具 进入正题 1. 初始化项目: 2. 安装LogicFlow核心依赖: 3. 初始化目录及容器: 4. 导入LF核心模块和默认样式文件: 5. 声明LF和容器对象并在挂在时初始化: 6. 运行项目 推荐几个好用的工具 var-conv 适用于VSCode IDE的代码变量名称快速转换工具 generator-vite-plugin 快速生成Vite插件模板项目 generator-babel-plugin 快速生成Babel插件模板项目 进入正题 LogicFlow 是一

  • vue3+vite兼容低版本的白屏问题详解(安卓7/ios11)

    目录 如何兼容ios11 如何兼容安卓7 如何使用@vitejs/plugin-legacy 补充知识:vue打包项目以后白屏和图片加载不出来问题解决方法 总结 vue3打包后在低版本浏览器或webview中出现白屏,原因就是因为语法兼容问题.根据vite官方文档描述,build.target默认支持 Chrome >=87.Firefox >=78.Safari >=14.Edge >=88 传送,所以需要我们手动兼容低版本. 本篇以vite2.安卓7/ios11为例. 如何兼容

  • vue3+vite项目中按需引入vant报错:Failed to resolve import的解决方案

    目录 问题描述 原因分析 解决方案 总结 问题描述 近日尝试使用vite+vue3+vant开发项目过程中,参考vant官网开发指南->快速上手->引入组件 按照上述配置好后,运行vite环境报错:Failed to resolve import 原因分析 根据报错信息,发现是vant的样式引入路径不对. 程序解析为:项目路径/node_modules/vant/lib/vant/es/组件/style 实际应该是:项目路径/node_modules/vant/lib/ vant/es/组件/

  • vue2老项目vite升级改造过程记录

    目录 前言 背景 改造过程 保留webpack的选项 vite引入和配置 vite-plugins引入 require报错问题 配置 完整配置 结束 总结 前言 Vite是一种新型前端构建工具,能够显著提升前端开发体验.它主要由两部分组成: 一个开发服务器,它基于 原生 ES 模块 提供了 丰富的内建功能,如速度快到惊人的 模块热更新(HMR). 一套构建指令,它使用 Rollup 打包你的代码,并且它是预配置的,可输出用于生产环境的高度优化过的静态资源. Vite 意在提供开箱即用的配置,同时

  • 脚手架(vue-cli)创建Vue项目的超详细过程记录

    目录 cli3.x/4.x创建Vue项目 1.创建项目 2.项目手动配置 3.选择vue版本 4.路由模式 5.配置文件的存放位置 6.配置保存 项目创建成功 总结 cli3.x/4.x创建Vue项目 1.创建项目 vue create vue_project(项目名) 敲击回车,出现以下页面 此处本人一般选择手动配置,因为eslint真的是个很可怕的东西,它对代码格式的严格要求,真的会把人逼疯的,代码有一点点不规范的地方程序都会报错 2.项目手动配置 按空格键选择或取消选择 3.选择vue版本

  • 老项目迁移AndroidStudio3.0遇到的坑

    AndroidStudio3.0刚刚发布两天(版本控的我~),便迫不及待的升级了,升级前也明白这次的版本跨度较大,老项目可能存在很多的问题,没成想还是从中午折腾到了晚上十点.不过结果还不错,成功的跑起来了项目. 列出踩过的坑,希望后面要升级的小伙伴遇到类似的问题可以做个参考; 1.升级安装 升级方法: 1. 直接用自带的更新工具 操作步骤: >菜单栏>Help>Check for Updates..(前提网络要绝对的畅通,你懂的) 2. 手动的下载新的版本 下载地址https://dev

  • 项目适 Oracle改造及SSL安全性配置问题汇总详解

    目录 背景 Oracle 适配点 其他低级错误 高级问题 工具思维 开发启示录 背景 项目开发初期使用 MySQL ,后期需要适配 Oracle ,总结适配过程及多数据库支持时,从开发初期就需要考虑的几点. 另外,总结几点最近半年开发过程中的技术问题.坑都填了,也该是时候记录一下填坑的经过了,要不然下次可能还会踏入同一个坑. Oracle 适配点 表名称长度限制,支持 Oracle 12C 以下是需要考虑 30个字符的限制. Oracle 关键字 USER 不能乱用做别名.跟 MySQL 不一样

  • vue2.0+webpack环境的构造过程

    本文给大家介绍vue2.0+webpack环境构造过程. 1.首先新建一个目录vue-wkdemo,这是我们的项目目录.执行 npm init 命令生成package.json文件.执行npm init之后,会提示你填写一些项目的信息,一直回车默认就好了,或者直接执行 npm init -y 直接跳过询问步骤. 2.安装项目依赖项 npm install webpack webpack-dev-server vue-loader vue-html-loader css-loader vue-st

  • vue中使用protobuf的过程记录

    由于目前公司采用了ProtoBuf做前后端数据交互,进公司以来一直用的是公司大神写好的基础库,完全不了解底层是如何解析的,一旦报错只能求人,作为一只还算有钻研精神的猿,应该去了解一下底层的实现,在这里记录一下学习过程. Protobuf简单介绍 Google Protocol Buffer(简称 Protobuf)是一种轻便高效的结构化数据存储格式,平台无关.语言无关.可扩展,可用于通讯协议和数据存储等领域. 有几个优点: 1.平台无关,语言无关,可扩展: 2.提供了友好的动态库,使用简单; 3

  • SpringBoot项目集成Flyway详细过程

    一.Flyway Flyway是独立于数据库的应用.管理并跟踪数据库变更的数据库版本管理工具.用通俗的话讲,Flyway可以像Git管理不同人的代码那样,管理不同人的sql脚本,从而做到数据库同步. 二.流程 1. 首先配置好flyway的基本信息后,运行项目,会在数据库表中默认新建一个数据表用于存储flyway的运行信息,默认的数据库名:flyway_schema_history 2. 紧接着Flyway将开始扫描文件系统或应用程序的类路径进行迁移.然后,Flyway的数据迁移将基于对用sql

  • 一次tomcat源码启动控制台中文乱码的调试过程记录

    发现问题 今天准备学习下tomcat源码,于是从官网下载了tomcat的源码,导入到IDEA中,使用maven工具build完项目之后,启动项目,控制台打印了tomcat日志,但是中文都是乱码. 一开始我怀疑是IDEA的问题,于是在网上找了各种解决办法尝试.大致有这几种: 1.修改run/debug configurations,添加VM options参数:-Dfile.encoding=utf-8; 2.修改run/debug configurations,添加Enviroment vari

  • Centos6.5升级glibc过程介绍

    目录 场景需求 glibc版本 glibc安装 glibc软链 场景需求 默认的Centos6.5 glibc版本最高为2.12, 而在进行Nodejs开发时项目所依赖的包往往需要更高版本的glibc库支持, 因此在不升级系统的前提下, 需要主动更新系统glibc库. 一般遇到错误libc.so.6: version GLIBC_2.14 not found时表示需要对glibc进行升级了. glibc版本 查看系统glibc库版本可使用如下命令: $ strings /lib64/libc.s

  • CentOS7环境下gcc(版本10.2.0)升级详细过程

    目录 简短介绍 1.查看当前gcc版本 2.下载gcc安装包(10.2.0版本) 3.解压安装包 4.下载依赖库 5.安装系统必须包模块 6.创建编译目录 7.生成Makefile文件 说明: 8.编译 9.安装 10.配置libstdc++.so 11.配置环境变量 总结 简短介绍 大家好,今天给大家分享gcc编译器的升级方法.在linux系统中其实已经自带了gcc编译器,但是版本比较低.目前有些开源工具例如:Apache Doris在安装时需要更高版本的gcc 5.3.1+以上版本编译器才能

随机推荐