vite和webpacke的常规配置

文章目录

    • 1、vite和webpacke的区分
    • 2、vite的常规配置
      • 介绍
      • 主要部分介绍
      • vite基本配置示例
    • 3、webpacke的常规配置
      • 介绍
      • 主要部分介绍
      • Webpack 基本配置示例

1、vite和webpacke的区分

  • 相同点: 都是构建工具,用于资源打包 ; 都有应用到摇树原理 tree shaking。

Tree-shaking 是指在打包过程中通过静态分析,识别并删除未使用的代码,以减小最终输出文件的大小。

  • 不同点
不同点vitewebpacke
插件生态相对较少非常丰富
配置复杂度在设计上更注重开箱即用,大部分场景下用户无需自己写配置文件配置相对复杂,对新手不够友好
开发模式采用了基于ES Module的开发服务器,只有在需要时才会编译对应的模块,大幅度提升了开发环境的响应速度。在开发模式下依然会对所有模块进行打包操作,虽然提供了热更新,但大型项目中依然可能会出现启动和编译缓慢的问题;
打包效率利用了浏览器对ES Module的原生支持,只打包和缓存实际改动的模块,从而极大提高了打包效率会把所有的模块打包成一个bundle,这会导致初次加载速度较慢
热更新机制热更新是增量更新,只更新修改的文件,所以即使在大型应用中也能保持极快的编译速度热更新是全量更新,即使修改一个小文件,也会重新编译整个应用,这在大型应用中可能会导致编译速度变慢
应用场景凭借其轻量和速度,更适合于中小型项目和快速原型开发其丰富的功能和扩展性,适合于大型、复杂的项目

2、vite的常规配置

介绍

vite官网

vite是一个由Vue.js开发的构建工具,它利用了ES Module Imports,在开发环境下可以实现按需编译,加快了开发速度。而在生产环境下,它使用Rollup进行打包,提供更好的tree-shaking、代码压缩和性能优化。
vite主要解决了现有工具(如webpack、rollup)在大型项目开发过程中存在的启动慢、热更新慢等问题。vite致力于为现代前端工作流提供一个更快、更轻的解决方案。

Vite的特点包括:

  • 快速的启动时间。通过区分依赖和源码两类模块,改进了开发服务器启动时间。
  • 轻量快速的热重载。无论应用程序的大小如何,都始终很快的模块热重载(HMR)。
  • 即时更新。具有HMR功能的框架可以利用Vite提供的原生ESM的HMR API提供即时、准确的更新,而无需重新加载页面或清除应用程序状态。
  • 按需编译返回。Vite在开发模式下不需要打包,只需要编译浏览器发出的HTTP请求对应的文件即可,因此热更新速度很快。
    在这里插入图片描述

主要部分介绍

  • root: 指定项目的根目录,默认为当前工作目录。在这个例子中,我们设置为 ./,表示当前目录。
  • build: 配置构建选项,其中 outDir 指定了构建的目标目录,即打包输出的目录。
  • base: 指定项目的基础公共路径,默认为 /,用于在构建时生成链接。例如,如果设置为 /my-app/,那么构建时生成的链接会以 /my-app/ 开头。
  • publicDir: 指定静态资源目录,默认为 public,用于存放不需要经过 Vite 处理的静态资源文件。
  • plugins: 配置插件,可以在这里添加 Vite 插件,例如 Vue 插件等。
  • resolve: 配置解析选项,例如设置别名等,使得在项目中可以使用别名来引用模块。
  • server: 配置开发服务器,可以设置端口号、是否自动打开浏览器等选项。
  • optimizeDeps: 配置优化选项,例如按需加载依赖项等。

vite基本配置示例

// vite.config.js
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'; // 导入 Vue 插件
export default defineConfig({
  // 项目根目录,默认为当前工作目录
  root: './',

  // 指定构建的目标目录,默认为 "dist"
  build: {
    outDir: 'dist',
  },
  
  // 项目的基础公共路径,默认为 "/"
  base: '/',

  // 指定静态资源目录,默认为 "public"
  publicDir: 'public',
  
  // 配置插件,可以在这里添加 Vite 插件
  plugins: [
    vue(), // 添加 Vue 插件
  ],
  
  // 配置解析选项,例如别名等
  resolve: {
    alias: {
      '@': '/src', // 设置 @ 别名指向 src 目录
    },
  },
  
  // 配置开发服务器
  server: {
    port: 3000, // 指定开发服务器端口,默认为 3000
    open: true, // 启动开发服务器时自动打开浏览器
    proxy: { // 代理
         '/api': { 
          target: 'http://11.11.11.11:9900/',
          changeOrigin: true, 
          rewrite: path => path.replace(/^\/api/, '')
      },
    }
  },
  
  // 配置优化选项,例如按需加载依赖项等
  optimizeDeps: {
    // 可以配置优化依赖项的行为
  },
});

3、webpacke的常规配置

介绍

webpacke官网

webpack 是一个用于现代 JavaScript 应用程序的 静态模块打包工具。当 webpack 处理应用程序时,它会在内部从一个或多个入口点构建一个 依赖图(dependency graph),然后将你项目中所需的每一个模块组合成一个或多个 bundles,它们均为静态资源,用于展示你的内容。
在这里插入图片描述

主要部分介绍

  • entry(入口): 指定入口文件为 src/main.js。
  • output(输出): 输出指示webpack打包后的资源bundles输出到哪里,以及如何命名。
  • resolve( 配置模块): 配置模块解析的相关选项,例如文件扩展名和别名。
  • module.rules(模块解析): 配置处理不同类型模块的规则,例如处理 Vue 单文件组件、使用 Babel 转译 JavaScript、处理样式文件等。
  • plugins(插件): 配置使用的插件,例如生成 HTML 文件、处理 Vue 单文件组件等。
  • devServer(开发服务器): 配置开发服务器的相关选项,例如内容的来源、压缩、端口等。
  • devtool: 配置生成 source map 的方式,方便调试。

Webpack 基本配置示例

// vue.config.js
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const { VueLoaderPlugin } = require('vue-loader');

module.exports = {
   // 入口文件
  entry: './src/main.js', 
  output: { 
    // 输出路径 __dirname是nodejs的变量,代表当前文件webpack.js目录的绝对路径
    path: path.resolve(__dirname, 'dist'), 
    // 输出文件名
    filename: 'bundle.js', 
    publicPath: '/',
  },
  resolve: {
    // 用于指定在引入模块时可以省略的文件扩展名,可以让你在引入文件时不需要写明文件的扩展名
    extensions: ['.js', '.vue'],
    // 用于创建模块路径的别名,可以简化模块引入的路径,可以让你使用 @ 来代替 src 目录的绝对路径。
    alias: {
      '@': path.resolve(__dirname, 'src'),
    },
  },
  module: {
    rules: [
      {
        test: /\.vue$/,
        loader: 'vue-loader',
      },
      {
        test: /\.js$/,
        exclude: /node_modules/,
        use: {
          loader: 'babel-loader',
        },
      },
      {
       // test:使用正则匹配文件
      // 这个规则表示当 Webpack 遇到以 .css 结尾的文件时,会先使用 css-loader 处理,然后再使用 style-loader 将样式注入到页面中。
        test: /\.css$/,
        use: ['style-loader', 'css-loader'],
      },
      {
        test: /\.(png|jpe?g|gif)$/i,
        use: [
          {
            loader: 'file-loader',
            options: {
              name: '[name].[ext]',
              outputPath: 'images',
            },
          },
        ],
      },
    ],
  },
  plugins: [
     // html-webpack-plugin插件会打包html文件
    // 功能:会默认创建一个空的html,自动引入打包后输出的所有资源(js/css)
    new HtmlWebpackPlugin({
      template: './public/index.html',
      filename: 'index.html',
      favicon: './public/favicon.ico',
    }),
    // VueLoaderPlugin这个插件是 Vue Loader 的一个插件,用于解析和转换 Vue 单文件组件。
    new VueLoaderPlugin(), 
  ],
  devServer: {
     // 指定服务器的根目录,告诉服务器从哪里提供内容
    contentBase: path.join(__dirname, 'dist'), 
    compress: true,
    //  指定开发服务器的端口号,默认为 8080。
    port: 9000,
    open: true,
    // 设置代理,用于解决跨域请求问题。可以将某些 URL 下的请求代理到另外一个服务器。
    proxy: {
      '/api': {
        target: 'http://11.11.11.11:9900/',
        changeOrigin: true,
        ws: true,
        pathRewrite: {
          '': '',
        },
      },
    },
  },
  devtool: 'eval-source-map',
  // 模式 用于指定当前构建的模式。它有三个可选值:development、production 和 none。
  mode: 'development'
};

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

网络研讨会 | 数据中心中的人工智能

人工智能(AI)是嵌入式开发人员必须解决的最复杂的技术之一。将其集成到您的系统中会带来很多问题而不是很多答案。行业媒体Embedded Computing Design特地推出“工程师的人工智能集成指南”月度网络研讨会系列,目的是尽可能地简化嵌入式计算设…

「共沐书香 分享喜“阅”」世界读书日交流活动在国际数字影像产业园圆满举行

人间最美四月天,正是读书好时节。4月23日,在数媒大厦的春日里,我们共同迎来了第29个“世界读书日"。由数字影像联合工会委员会、树莓科技(成都)集团有限公司工会委员会主办,成都树莓信息技术有限公司、…

Linux(韦东山)

linux和windows的差别 推荐学习路线 先学习 应用程序 然后: 驱动程序基础 最后:项目 韦东山课程学习顺序 看完第六篇之后,还可以继续做更多的官网的项目 入门之后,根据自己的需要学习bootloader / 驱动大全 / LVGL

误差的一阶和二阶——MSE/MAE

variance和bias MSE之前,先看两个更为朴素的指标:variance和bias。 在打靶中,有的人所有的子弹都离靶心很远,偏差显然过高,但是很稳定地维持在某一点附近;有的人平均环数更高,但是分布太过分散…

网络安全之SQL注入漏洞复现(中篇)(技术进阶)

目录 一,报错注入 二,布尔盲注 三,sleep延时盲注 四,DNSlogs 盲注 五,二次注入 六,堆叠注入 总结 一,报错注入 报错注入就是在错误信息中执行 sql 语句,利用网站的报错信息来带…

2024-04-23 linux 查看内存占用情况的命令free -h和cat /proc/meminfo

一、要查看 Linux 系统中的内存占用大小,可以使用 free 命令或者 top 命令。下面是这两个命令的简要说明: 使用 free 命令: free -h这将显示系统当前的内存使用情况,包括总内存、已用内存、空闲内存以及缓冲区和缓存的使用情况。…

使用 Flutter 打造引人入胜的休闲游戏体验

作者 / Zoey Fan 去年,Flutter 休闲游戏工具包进行了一次重大更新。近期在旧金山举办的游戏开发者大会 (GDC) 上,Flutter 首次亮相。GDC 是游戏行业的顶级专业盛会,致力于帮助游戏开发者不断提升开发技能。欢迎您继续阅读,了解开发…

小程序AI智能名片商城系统如何依赖CPM、CPC、CPS技术应用进行营销

在数字化营销的新纪元中,小程序AI智能名片商城系统以其高效、智能的特性,成为了企业营销的重要工具。而CPM、CPC、CPS这三种技术应用,更是为该系统赋予了强大的营销能力。接下来,我们将通过详细的例子,探讨这些技术是如…

微信小程序webview和小程序通讯

1.背景介绍 1.1需要在小程序嵌入vr页面,同时在vr页面添加操作按钮与小程序进行通信交互 1.2 开发工具:uniapp开发小程序 1.3原型图 功能:.点击体验官带看跳转小程序的体验官带看页面 功能:点击立即咨询唤起小程序弹窗打电话 2.…

力扣数据库题库学习(4.23日)

610. 判断三角形 问题链接 解题思路 题目要求:对每三个线段报告它们是否可以形成一个三角形。以 任意顺序 返回结果表。 对于三个线段能否组成三角形的判定:任意两边之和大于第三边,对于这个表内的记录,要求就是(x…

【C语言】指针篇-一篇搞定不同类型指针变量-必读指南(3/5)

男儿不展风云志,空负天生八尺躯。——《警世通言卷四十》🌈个人主页:是店小二呀 🌈C语言笔记专栏:C语言笔记 🌈C笔记专栏: C笔记 🌈喜欢的诗句:无人扶我青云志 我自踏雪至山巅 上篇…

vue项目启动npm install和npm run serve时出现错误Failed to resolve loader:node-sass

1.常见问题 问题1:当执行npm run serve时,出现Failed to resolve loader: node-sass,You may need to install it 解决方法: npm install node-sass4.14.1问题2:当执行npm run serve时,出现以下错误 Fa…

ADC内部运行原理

1以一个简单的外置ADC为例讲解 1在外部由地址锁存和译码经行去控制通道选择开关//去控制外部那一条IO口输入,输入到比较器 2逐次逼近寄存器SAR每次从三态锁存缓冲器读取值在由DAC(数模转换成模拟电压)在输入到比较器当io信号和DAC信号几乎一样…

JWT原理解析

一、概述 虽然现在很多的开发框架会支持JWT的使用,但是对JWT还是没有一个详细的了解,有很多疑惑: JWT比之前的session或者token有什么好处?JWT的构成元素是什么?JWT从生成到使用的详细流程? 二、 JWT 2…

华为数通方向HCIP-DataCom H12-821题库(多选题:321-340)

第321题 关于OSPF的命令描述,不正确的是: A、stub区域和totally stub区域配置了no-summary参数 B、OSPFv2和OSPF v3配置接口命令的区别是OSPF V2可以使用network命令,而OSPFv3直接 C、在接口上使能stubrouter命令用来配置次路由器为stub路由器,stub路由器可以与非stub路由 …

AUTOSAR-COMStack-003_SignalGroup如何发送接收

1. Ref Ref.1 AUTOSAR_RS_Main.pdf Ref.1 AUTOSAR_RS_Features.pdf Ref.2 AUTOSAR_SRS_COM.pdf Ref.3 AUTOSAR_SWS_COM.pdf 2. 为什么要使用Signal Group? 2.1 Traceabilty [RS_PO_00004] AUTOSAR shall define an open architecture for automotive software.…

debian和ubuntu的核心系统和系统命令的区别

Debian和Ubuntu虽然有很深的渊源,都是基于Debian的发行版,但它们在核心系统和系统命令上还是有一些差别的。以下是一些主要的不同之处: 1. 发布周期: - Debian: Debian项目采用滚动发布模型,持续更新&a…

【数据结构(邓俊辉)学习笔记】向量03——无序向量

文章目录 0.概述1.元素访问2.置乱器3.判等器与比较器4.无序查找4.1 判等器4.2 顺序查找4.3 实现4.4 复杂度 5. 插入5.1 算法实现5.2 复杂度分析 6. 删除6.1 区间删除6.2 单元删除6.3 复杂度 7. 唯一化7.1 实现7.2 正确性7.3 复杂度 8. 遍历8.1 实现8.2 复杂度 9. 总结 0.概述 …

vue3引入图片 无法使用require, vue3+vite构建项目使用require引入包出现问题需要用newURL来动态引入图片等静态资源

在vue3中 require引入图片的本地资源报错Uncaught (in promise) ReferenceError: require is not defined <template> <img :src"imageSrc" alt"My Image"> </template> <script> import imageSrc from /assets/image.png; export…

多媒体技术如何为地震体验馆增添更多真实元素?

近年来&#xff0c;为提升公众安全意识&#xff0c;众多体验式科普展馆纷纷崭露头角&#xff0c;其中地震体验馆尤为引人瞩目&#xff0c;成为学校安全教育的热门场景&#xff0c;接下来&#xff0c;我们就深入探索一下&#xff0c;这种运用了多媒体技术的地震体验馆&#xff0…
最新文章