WEBPACK、VITE 常用配置(对照)及迁移指南

news2024/11/25 10:14:16

文中 Webpack 版本为 5.x,Vite 版本为 4.3.x

webpack 是新一代构建工具里面的老大哥了,从 2013 年发布已经持续升级 10 年,形成完备的生态环境。vite 则是下一代前端开发与构建工具,2019年发布,最新发布版本 4.3.3(截至 23年4月底),性能能继续提升👍。

实际开发中我还是以 webpack 为主,还记得 2015 年刚刚开始接触时,一顿醍醐灌顶,原来前端也可以这样玩(思维定性了🙂)。

新建项目

# 安装最新版本的 vue-cli(5.x)
npm install -g @vue/cli
# 新建项目
vue create 项目名称

# VITE
npm create vue@3

在这里插入图片描述

配置文件

两者的配置文件一般是webpack.config.js(使用 vue-cli 创建的项目嵌套在vue.config.js内)、vite.config.js

dev-server

开发环境下非常重要的配置项,webpack 默认服务端口8080(跟 tomcat 的冲突哈哈)、vite 默认端口5173

# webpack
devServer: {
    host:"0.0.0.0",
    port: 3000,
    proxy: "http://localhost:10086"
}

# vite
server: {
    host:"0.0.0.0",
    port: 3000,
    proxy: {
        "/proxy": "http://localhost:10086"
    }
}

端口占用
当开发服务的端口被占用时,框架会非常人性化地自动顺延。

关于应用启动

  • 启动命令 webpack 用的是 serve,vite 则是dev,开发人员可根据个人喜好进行修改。
  • 启动时间 不得不说 vite 真的是快如闪电(webpack 则需要一段编译的时间),而且新版还对首屏载入时间进行了优化(旧版加载首页时有明显的卡顿 😅)

内存占用

在 windows 11 (64位)下 webpack、vite 在进入首页后内存占用分别为92MB43MB,数值仅供参考。

CTRL+C退出

# VITE 下使用 CTRL+C 强制退出时,控制台会输出一条报错信息,目前未能找到解决方案(强迫症患者表示有点受不了 😩
 ELIFECYCLE  Command failed with exit code 1.

其他

  • vite 支持在修改配置文件时自动重启,这一点还是不错

定义常量

若我们需要在项目中使用预设的常量值(如版本号、服务地址、版权信息等),则可以使用构建工具提供的常量定义(define)。比如定义常量_APPNAME_

import { name, dependencies, devDependencies  } from "./package.json"

// WEBPACK
configureWebpack: config => {
    config.plugins.push(
        new webpack.DefinePlugin({
            "_APPNAME_": JSON.stringify(name),
            "_URL_": `"http://localhost:10086"`,
            // 将项目生产依赖、开发依赖定义为常量,则可以在页面中展示(开源库常用做法😀)
            "_APP_INFO_": JSON.stringify({ dependencies, ddevDependencies })
        })
    )
}

// VITE
define :{
	//同上
}

注意事项

摘自 https://webpack.js.org/plugins/define-plugin/

  • 如果该值为字符串,它将被作为代码片段来使用
  • 如果该值不是字符串,则将被转换成字符串(包括函数方法
  • 如果值是一个对象,则它所有的键将使用相同方法定义
  • 如果键添加 typeof 作为前缀,它会被定义为 typeof 调用

项目中如何使用

  • 直接打印 console.debug(_APPNAME_)
  • 业务逻辑 if(_APPNAME_=="test") {}

动态引入

// webpack 中可以通过 require 动态引入依赖,比如仅在特定环境下才启用 mock。
if(process.env.NODE_ENV == "test"){
    window.isMock = true
    require('./mock')
}

/**
 * 在 VITE 下可以这么做
 * 这个是我尝试过多种方法后较为便捷的方案,如果读者有更好的方式烦请告知🤝
 */
if(process.env.NODE_ENV == "test"){
	const mod = import.meta.glob("./mock/index.js")
	await mod["./mock/index.js"]()
}

批量引入

假设在modules目录下存在 N 个 js 文件

/**
 * 使用 WEBPACK
 */
 const modules = require.context('./modules', true, /\.js$/)
 modules.keys().forEach(key=>{
    console.debug(key, modules(key).default)
})

/**
 * VITE 下按照下方代码动态导入
 * https://vitejs.cn/guide/features.html#glob-import
 */
const modules = import.meta.globEager('./modules/**/*.js')
Object.keys(modules).forEach((key) => {
    console.debug(key, modules[key].default)
})

项目打包

方式首次打包耗时二次打包耗时平均耗时体积
WEBPACK12360ms9144ms10752ms1.31MB
WEBPACK(开启缓存)9850ms1852ms5852ms1.31MB
VITE9150ms8740ms8945ms1.27MB

机器配置如下:

  • Windows 11 家庭中文版(版本 21H2)
  • 操作系统版本 22000.1098
  • 处理器 11th Gen Intel® Core™ i5-11300H @ 3.10GHz 3.11 GHz
  • 机带 RAM 16.0 GB (15.8 GB 可用)

可以看到默认情况下 VITE 速度更优,随着项目规模增大表现更明显。WEBPACK 开启缓存后,首次打包速度没差别(产生了 66MB 的缓存文件),但后续打包速度得到大幅提升 👍

单文件打

此场景常见于将全部依赖打包成单个文件(复用库、后端程序等)

// webpack.config.js
module.exports = {
    mode: 'production',
    entry: './index.js',
    target: 'node',
    cache:{
        type: 'filesystem'
    }
}

附录

开源迁移工具

  • webpack-to-vite:将 webpack/vue-cli 项目转换为 vite 项目

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

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

相关文章

文件操作安全之-文件上传告警运营篇

本文从文件上传的定义,文件上传的IDS规则,文件上传的示例,文件上传的告警研判,文件上传的处置建议等几个方面阐述如何通过文件上传类型的告警的线索,开展日常安全运营工作,从而挖掘有意义的安全事件。 文件…

rtl仿真器-iverilog icarus安装和测试

Icarus Verilog是一个轻量、免费、开源的Verilog编译器,基于C实现,开发者是 Stephen Williams ,遵循 GNU GPL license 许可证,安装文件中已经包含 GTKWave支持Verilog/VHDL文件的编译和仿真,命令行操作方式&#xff0c…

C语言函数大全-- _w 开头的函数(1)

C语言函数大全 本篇介绍C语言函数大全-- _w 开头的函数 1. _waccess 1.1 函数说明 函数声明函数功能int _waccess(const wchar_t* path, int mode);用于测试文件或目录是否存在,并检查程序是否具有对它们的访问权限 参数: path : 待测试的…

Elasticsearch(三)

Elasticsearch(三) 数据聚合 聚合的分类 文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations.html 聚合可以实现对文档数据的统计、分析、运算。聚合常见的有三类: 桶聚合:用来对文档做分组 Te…

【P22】JMeter 调试后置处理程序(Debug PostProcessor)

&#xff08;1&#xff09;、测试计划右键 <<< 添加 <<< 线程&#xff08;用户&#xff09;<<< 线程组 默认参数即可 &#xff08;2&#xff09;、线程组右键 <<< 添加 <<< 取样器 <<< 调试取样器 默认参数即可 &…

SQL复习(一)——安装

1 mysql卸载 reference&#xff1a;https://blog.csdn.net/m0_67392273/article/details/126066580 Step1:停止MySql服务 在卸载之前&#xff0c;先停止MySQL8.0的服务 搜索“服务”&#xff0c;找到“MySQL”&#xff0c;右键点击选择“停止” Step2&#xff1a;软件的卸…

Unittest自动化测试之unittestunittest_生成测试报告

unittest_生成测试报告 测试报告为测试结果的统计即展示&#xff0c;是自动化测试不可或缺的一部分&#xff0c;利用unittest 可以生成测试报告 方式一、使用第三方 HTMLTestRunner 执行测试用例集&#xff0c;生成网页版测试报告&#xff08;推荐&#xff09; HTMLTestRunn…

5年软测经验去面试25k测试岗,看到这样的面试题我还是心虚了....

我是着急忙慌的准备简历——5年软件测试经验&#xff0c;可独立测试大型产品项目&#xff0c;熟悉项目测试流程...薪资要求&#xff1f;5年测试经验起码能要个25K吧 我加班肝了一页半简历&#xff0c;投出去一周&#xff0c;面试电话倒是不少&#xff0c;自信满满去面试&#…

系统掌握入河排污口设置论证技术、方法及报告编制框架

在短时间内较系统的掌握入河排污口设置论证技术、方法及报告编制框架&#xff0c;学习内容以城镇生活污水厂、造纸项目、石化项目、制药项目案例为线索&#xff0c;系统讲解入河排污口设置论证报告书编制过程&#xff0c;并以水质模型为手段&#xff0c;讲解水质影响预测模型的…

Voice Control for ChatGPT 沉浸式的与ChatGPT进行交流学习。

Voice Control for ChatGPT 日常生活中&#xff0c;我们与亲人朋友沟通交流一般都是喜欢语音的形式来完成的&#xff0c;毕竟相对于文字来说语音就不会显的那么的苍白无力&#xff0c;同时最大的好处就是能解放我们的双手吧&#xff0c;能更快实现两者间的对话&#xff0c;沟通…

华为OD机试真题 Java 实现【简单的自动曝光】【2023Q1 100分】

一、题目描述 一个图像有 n 个像素点&#xff0c;存储在一个长度为 n 的数组 img 里&#xff0c;每个像素点的取值范围[0,255]的正整数。 请你给图像每个像素点值加上一个整k(可以是负数)&#xff0c;得到新图 newlmg&#xff0c;使得新图 newlmg 的所有像素平均值最接近中位…

响应式设计和移动端优化:如何实现页面在不同设备上的适配和优化

章节一&#xff1a;介绍响应式设计和移动端优化 响应式设计是一种使网页能够自适应不同设备和屏幕尺寸的设计方法。它通过使用流式网格布局、媒体查询和弹性图片等技术&#xff0c;使得网页能够在不同分辨率和设备上呈现出最佳的布局和用户体验。 移动端优化则是针对移动设备…

青训营 x 训练营结营测试题目(前端方向)

文章目录 &#x1f4cb;前言&#x1f3af;选择题&#xff08;含多选&#xff09;&#x1f4dd;最后 &#x1f4cb;前言 这篇文章的内容是23年6月青训营 x 训练营结营题目&#xff0c;题目一共有25题&#xff0c;题目类型为选择题&#xff0c;包括了单选题和多选题&#xff0c;…

WiFi(Wireless Fidelity)基础(十二)

目录 一、基本介绍&#xff08;Introduction&#xff09; 二、进化发展&#xff08;Evolution&#xff09; 三、PHY帧&#xff08;&#xff08;PHY Frame &#xff09; 四、MAC帧&#xff08;MAC Frame &#xff09; 五、协议&#xff08;Protocol&#xff09; 六、安全&#x…

VHDL直流电机模糊控制器的设计与实现

在直流电机控制策略方面,属于智能控制理论的模糊控制其突出优点在于它不依赖于被控对象的模型,因此本设计尝试将模糊控制理论应用于直流电机转速控制,并将模糊控制器实现于FPGA(Field Programmable Gate Array)芯片上。在实现方法上本设计采用模糊查表控制法实现模糊控制器…

【C++】-static在类和对象中的作用和细节(下)

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树 ❤️‍&#x1fa79;作者宣言&#xff1a;认真写好每一篇博客 &#x1f4a8;作者gitee:gitee &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 文章目录 前言 前言 今天我们来讲一个static对类的对象的作用…

安全基础第十二天:nginx相关配置和nginx-host绕过

目录 一、nginx的动静分离 1.动静分离的原理 2.动静分离实验&#xff08;centos做为放置静态资源的服务器&#xff0c;ubuntu做为请求的web服务器&#xff09; &#xff08;1&#xff09;在centos的/usr/local/nginx/html下创建一个静态文件static &#xff08;2&#xff09…

目标检测概述

传统目标检测 任务目标 从图像中找出相应的物体位置 目标检测的核心目的在于&#xff0c;估计出目标在图像中的坐标。 问题定义 目标检测的结果是什么&#xff1f; 预测出目标在图像中的位置。 位置如何表示&#xff1f; 通常采用水平矩形框的形式估计目标。 在opencv中…

为什么Java要求多用组合,少用继承?

前言&#xff1a; 最近有一个要好的朋友去阿里大厂面试Java高级工程师&#xff0c;在第二轮面试的过程中&#xff0c;面试官提了一个问题&#xff1a;“解释下Java项目中为什么要求多用组合&#xff0c;少用继承&#xff1f;”。朋友觉得这个题目既熟悉&#xff0c;又陌生&…