react项目从webpack迁移到vite的解决方案

news2024/12/28 21:05:35

虽然webpack是前端工程编译工具的王者,但是最近vite牛逼吹的震天响,说什么开发/生产打包速度甩webpack 100条街。不管是不是事实,总得尝试一下吧。

于是说干就干,在网上找了很多资料,终于搞定了,以下就是react项目从webpack迁移到vite的详细步骤:

1. 安装依赖:vite, @vitejs/plugin-react-swc, vite-plugin-imp(解决antd按需引入的问题)

yarn add vite  '@vitejs/plugin-react-swc' vite-plugin-imp

同时从package.json文件中删除webpack相关依赖项和react-script依赖项(如果有)

2.  修改package.json的script部分的内容,如下所示:

  "scripts": {

    "start": "vite",

    "build": "vite build"

  },

5. 将index.html文件从public目录移到项目的根目录,并删除里面所有的%PUBLIC_URL%字符串,并在script标签下增加type="module"项目(这个是重点!!!)

<script type="module" src="./src/index.tsx"></script>

 6. 创建vite.config.ts文件,内容模板如下:

import { defineConfig,  } from "vite";

// import react from "@vitejs/plugin-react";

import react from "@vitejs/plugin-react-swc";

import vitePluginImp from "vite-plugin-imp";

const path = require("path");

export default defineConfig(() => {

  return {

    server: {

      host: "127.0.0.1",

      port: 7002, //  开发服务器的自定义端口号

      proxy: { // 此处配置请求后端api的代理

        "/api": { // 匹配后端的api前缀

          target: "http://127.0.0.1:3600", // 请求的后端api地址

          changeOrigin: true,

        },     

      },

    },

    resolve: {

      alias: {

        "@": path.resolve(__dirname, "./src"),

      },

    },

    build: {

      outDir: "dist",  // // 打包文件的总输出目录,这个可以自定义

      minify: true,

      rollupOptions: {

        output: {  // 以下配置生成打包文件的输出目录,js文件输出到js目录,其他资源文件

                    // 输出到各自类型的文件夹,比如css文件输出css目录

          // [name]表示文件名,[hash]表示该文件内容hash值

          entryFileNames: "js/[name]-[hash].js", // 入口文件输出名称,指定为js输出目录

          chunkFileNames: "js/[name]-[hash].js", // chunk文件名称,指定为js输出目录

          assetFileNames: "[ext]/[name]-[hash].[ext]", // 资源文件像 字体,图片等

     

        },

      },

    },

    plugins: [

      react(), // 编译react代码的react插件

      vitePluginImp({ // 解决antd的按需引入问题的插件

        libList: [

          {

            libName: "antd",

            libDirectory: "es",

            style: (name) => `antd/es/${name}/style`,

          },

        ],

      }),

    ],

    css: {  

      preprocessorOptions: {

        less: {

          javascriptEnabled: true,

        },

      },

    },

  };

});

然后通过yarn start 命令启动react项目:

启动看起来挺快的,实际访问一下web页面看一下:

可以看到加载页面还是挺慢的,首次加载花费了差不多一分钟,其中antd.js耗费了40.8秒

说实话感觉vite还是吹逼过头了,开发服务器的实际加载也没觉得有多快。

然后再来看看生产打包的速度:

运行yarn build 即可:

首次打包:花了90.72秒,时间还是挺长的

 修改生产配置项,再次打包:42.94秒

继续修改生产配置项,接着打包: 25.37秒

总结一下: vite的开发服务器的编译渲染还是很慢的,证明了vite确实在吹逼。

    vite的生产打包首次非常慢,再次打包速度会变快,应该是采取了某种缓存机制。

vite强制浏览器使用es module模式(能识别import/export语法),限制了vite打包文件的兼容性

基于以上几点,不推荐使用vite,还是webpack更稳,慢是慢点,但是方案最成熟,兼容性好,而且功能强大。而且没看到vite快多少,反而是一堆问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1060075.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

QT实现TCP服务器客户端

服务器 .cpp #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//实例化一个服务器server new QTcpServer(this);// 此时&#xff0c;服务器已经成功进入监听状…

区间搜索指令(博途SCL)

S型速度曲线行车位置控制,停靠位置搜索功能会用到区间搜索指令,下面我们详细介绍区间搜索指令的相关应用。 S型加减速行车位置控制(支持点动和停车位置搜索)-CSDN博客S型加减速位置控制详细算法和应用场景介绍,请查看下面文章博客。本篇文章不再赘述,这里主要介绍点动动和…

sheng的学习笔记-【中文】【吴恩达课后测验】Course 1 - 神经网络和深度学习 - 第一周测验

课程1_第1周_测验题 目录&#xff1a;目录 第一题 1.“人工智能是新电力” 这个比喻指的是什么&#xff1f; A. 【  】人工智能为我们的家庭和办公室的个人设备供电&#xff0c;类似于电力。 B. 【  】通过“智能电网”&#xff0c;人工智能正在传递新一波的电力。 C. …

【多级缓存】

文章目录 1. JVM进程缓存2. Lua语法3. 实现多级缓存3.1 反向代理流程3.2 OpenResty快速入门 4. 查询Tomcat4.1 发送http请求的API4.2 封装http工具4.3 基于ID负载均衡4.4 流程小结 5. Redis缓存预热 传统的缓存策略一般是请求到达Tomcat后&#xff0c;先查询Redis&#xff0c;如…

App分发苹果ios内测ipa应用文件签名分发平台剖析其运行模式及法律注意事项

随着移动应用的快速发展&#xff0c;为了确保应用的质量和稳定性&#xff0c;开发者们通常在发布应用之前会进行内部测试。而App内测签名分发平台作为一种解决方案&#xff0c;不仅能够提供快速的应用分发和安装&#xff0c;还能确保应用的完整性和可靠性。本文将详细分析App内…

【算法|动态规划No.11】leetcode53. 最大子数组和

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 &#x1f354;本专栏旨在提高自己算法能力的同时&#xff0c;记录一下自己的学习过程&#xff0c;希望…

input允许多行输入

input允许多行输入 input允许多行输入 ______________________________ 表示停止输入想象一下&#xff0c;我们现在身处一间充满活力的课堂。学生们坐在自己的座位上&#xff0c;准备聆听老师的讲解。老师站在讲台上&#xff0c;充满激情地开始教授代码。 老师&#xff1a;同…

星球作业(第十期)Android中的ClassLoader

Android中的ClassLoader 1.Android中有哪几种ClassLoader&#xff1f;它们的作用和区别是什么&#xff1f; 2.简述ClassLoader的双亲委托模型 Android中有哪几种ClassLoader&#xff1f;它们的作用和区别是什么&#xff1f; Android中有三个ClassLoader&#xff0c;分别是Bas…

【智慧导诊系统源码】智慧导诊系统的技术支撑与实际运作

什么是智慧导诊系统? 简单地说&#xff0c;智慧导诊系统是一种利用人工智能技术&#xff0c;为医生提供帮助的系统。它可以通过分析患者的症状和病史为医生提供疾病诊断和治疗方案的建议。 智慧导诊系统需要具备以下技术支撑才能实现 人工智能技术支撑。智慧导诊系统的核心在…

设计模式9、组合模式 Composite

解释说明&#xff1a;组合多个对象形成树形结构以表示具有部分-整体关系的层次结构。组合模式让客户端可以统一对待单个对象和组合对象。 抽象根节点&#xff08;Component&#xff09;&#xff1a;定义系统各层次对象的共有方法和属性&#xff0c;可以预先定义一些默认行为和属…

两种新建CAA项目快捷启动方式

文章目录 一、前言二、新建项目快捷启动方式&#xff08;相当于直接Cnext进入&#xff09;方式一&#xff1a;按下面图示操作&#xff08;以V5 R21为例&#xff09;方式二&#xff1a;按下面图示操作&#xff08;以V5 R18为例&#xff09; 一、前言 环境变量配置文件可存放路径…

字典与数组第七讲:工作表数据计算时为什么要采用数组公式(一)

《VBA数组与字典方案》教程&#xff08;10144533&#xff09;是我推出的第三套教程&#xff0c;目前已经是第二版修订了。这套教程定位于中级&#xff0c;字典是VBA的精华&#xff0c;我要求学员必学。7.1.3.9教程和手册掌握后&#xff0c;可以解决大多数工作中遇到的实际问题。…

个人论坛系统的测试用例

首先要弄清楚论坛系统都具有什么功能&#xff0c;然后对各个功能进行分类编写测试用例。

使用Sen2cor对Sentinel-2辐射定标和大气校正

使用Sen2cor对Sentinel-2辐射定标和大气校正 在上一篇文章中&#xff0c;先对Sen2cor进行了安装 先定位到插件所在文件夹下 cd C:\Users\lenovo\AppData\Local\Sen2Cor-02.11.00-win64如果在上一篇中已经配置好环境变量&#xff0c;那就不用cd定位了&#xff0c;直接输后面的…

经典算法-----八皇后问题

目录 前言 八皇后问题 1.问题简介 1.2思路剖析 1.3递归和回溯 代码实现 ​编辑 1.递归回溯解决 能否放置数组 完整代码&#xff1a; 2.非递归回溯解决 前言 今天我们学习一个新的算法&#xff0c;也就是回溯算法&#xff0c;就以八皇后问题作为示例&#xff0c;这是…

剑指offer——JZ25 合并两个排序的链表 解题思路与具体代码【C++】

一、题目描述与要求 两个链表的第一个公共结点_牛客题霸_牛客网 (nowcoder.com) 题目描述 输入两个无环的单向链表&#xff0c;找出它们的第一个公共结点&#xff0c;如果没有公共节点则返回空。&#xff08;注意因为传入数据是链表&#xff0c;所以错误测试数据的提示是用其…

C++的对像生存期

栈 栈由操作系统分配管理&#xff0c;也就是它是规整的&#xff0c;内存的大小在申请之后不会发生变化。因此&#xff0c;它不会出现碎片化&#xff0c;并且读取速度非常的快 例如&#xff1a;经常声明的局部变量&#xff0c;一些基本数据类型&#xff0c;如int ,double, char…

力扣 -- 518. 零钱兑换 II(完全背包问题)

解题步骤&#xff1a; 参考代码&#xff1a; 未优化代码&#xff1a; class Solution { public:int change(int amount, vector<int>& coins) {int ncoins.size();//多开一行&#xff0c;多开一列vector<vector<int>> dp(n1,vector<int>(amount1…

LLVM IR 文档 专门解释 LLVM IR

https://llvm.org/docs/LangRef.html#phi-instruction

Linux网络编程:详解https协议

目录 一. https协议概述 二. 中间人截获 三. 常见的加密方法 3.1 对称加密 3.2 非对称加密 四. 数据摘要和数据签名的概念 五. https不同加密方式的安全性的探究 5.1 使用对称加密 5.2 使用非对称加密 5.3 非对称加密和对称加密配合使用 六. CA认证 七. 总结 一.…