(01)vite 从启动服务器开始

文章目录

    • 前言
    • 在浏览器中使用es模块
    • 初始化环境
    • vite依赖预构建解决了什么问题
    • 创建vite.config.js配置vite
    • 为什么vite.config.js可以用esmodule规范

在这里插入图片描述

前言

Vite(发音为"veet")是一种现代化的前端构建工具,旨在提供快速的开发体验。它由尤雨溪(Vue.js 的创始人)团队开发并维护。Vite主要用于构建基于现代 JavaScript 框架(如Vue.js、React、以及Svelte等)的应用程序。

与传统的前端构建工具不同,Vite采用了一种基于ESM(ECMAScript模块)的开发服务器,利用浏览器原生支持的模块导入方式,实现了快速的冷启动和开发服务器启动的速度。它使用了一种称为“原生 ES 模块”的方式,允许按需加载模块,从而减少了不必要的初始化时间。

Vite还支持零配置的开发体验,通过约定的目录结构,你可以在不需要额外配置的情况下快速搭建项目。此外,Vite还提供了一些插件系统,使得开发者可以根据需要进行定制和扩展。

在浏览器中使用es模块

index.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body></body>
</html>
<!-- 开启es 模块化 -->
<script src="./main.js" type="module"></script>

main.js

import _ from "lodash";
import { count } from "./counter.js";console.log(count)

counter.js

export var count = 0

浏览器报错,无法识别非相对路径或非绝对路径的资源

在这里插入图片描述

初始化环境

 yarn init -y
 yarn add lodash
yarn add vite -D // 生产环境不使用vite

改造 package.json

{"name": "vite","version": "1.0.0","main": "index.js","license": "MIT","scripts": {"dev": "vite"},"dependencies": {"lodash": "^4.17.21"},"devDependencies": {"vite": "^5.0.0"}
}

通过vite启动项目服务器

yarn dev

在这里插入图片描述
成功打印count
在这里插入图片描述
看一下网络资源,counter main lodash全部都成功引入了。

在这里插入图片描述

vite依赖预构建解决了什么问题

  1. 不同的第三方依赖包,有不同的导出格式(commonjs或者es module)。
  2. 对路径的处理上,可以直接使用.vite/deps。
  3. 网络多包传输性能问题

第一个问题,vite将所有的第三方模块全部统一编译为es module的格式
第二个问题,将编译好的所有模块 都统一放置到 .vite/deps 文件夹下,这样就可以使用绝对路径,直接引入。
在这里插入图片描述
第三个问题,第三方的包,可能会有很多依赖,如果分开下载这些依赖就会形成特别多的包,vite将这些依赖的包和第三方包本身全部编译成一个文件。

在这里插入图片描述

创建vite.config.js配置vite

如果关闭依赖预构建会是什么情况。

yarn add lodash-es

创建 vite的配置文件 vite.config.js

import { defineConfig } from "vite"export default defineConfig ({optimizeDeps: {exclude: ['lodash-es'] // 让lodash-es这个包不适用依赖预构建}
})

main.js 中引入lodash-es

import lodash from "lodash-es";
import { count } from "./counter.js";console.log(lodash);console.log(count);

重启服务器

yarn dev

lodash-es所有依赖的包都被分开下载了!!
在这里插入图片描述
还原 vite.config.js以后

import { defineConfig } from "vite"export default defineConfig ({optimizeDeps: {// exclude: ['lodash-es'] // 让lodash-es这个包不适用依赖预构建}
})

在这里插入图片描述
vite不仅仅集成了服务器,还集成了HMR, 允许在应用程序运行时替换、添加或删除模块,而无需重新加载整个页面。这使得开发者能够更快地查看和测试他们对代码的更改,而无需手动刷新整个应用程序。

为什么vite.config.js可以用esmodule规范

vite.config.js本身是在node端运行,node端本身是不支持esmodule规范的,vite在读取vite.config.js这个文件的时候,如果发现文件采用的是esmodule规范编写的,会将文件的内容再次编译。
vite用fs.readFile转为字符串,然后再用字符串的replace语法,替换关键代码,将esmodule转化为commonjs规范后再运行。
当然,如果你配置vite.config.js的时候,像webpack.config.js那样,使用commonjs规范,也是可以的。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何最大化客户生命周期价值?APMDR 模型在袋鼠云的落地实践

相信大家都认可一个观点&#xff1a;不论是 To B 还是 To C&#xff0c;用户是企业的核心资源&#xff0c;是互联网产品中最重要的价值之一。因此&#xff0c;深入挖掘用户价值成为现在大部分企业运营的关键。 之前我们为大家介绍过如何利用 RFM 模型让企业聚焦于更有价值的用…

双12电视盒子推荐:测评员解析目前电视盒子哪个最好

电视盒子不需要每月缴费&#xff0c;只需联网就可以收看海量视频资源&#xff0c;游戏、网课、投屏等功能让电视盒子的使用场景更丰富&#xff0c;我每年都会进行数十次电视盒子测评&#xff0c;本期要分享的是双十二电视盒子推荐&#xff0c;全面解析目前电视盒子哪个最好。 一…

NC65 修改元数据字段长度

NC65 修改元数据字段长度&#xff0c;执行下面sql&#xff0c;执行完后需要重启NC服务才生效。 --属性 update md_property set attrlength 200 where name fphm and classidece96dd8-bdf8-4db3-a112-9d2f636d388f ;--列 update md_column set columnlength 200 where tab…

系列六、ThreadLocal内存泄漏案例

一、内存泄漏 vs 内存溢出 内存泄漏&#xff1a;内存泄漏是指程序中已经动态分配的堆内存由于某种原因程序未释放或者无法释放&#xff0c;造成系统内存的浪费&#xff0c;导致程序运行速度减慢甚至导致系统崩溃等严重后果&#xff0c;内存泄漏最终 会导致内…

docker报错standard init linux.go:228 exec user process caused: exec format error

1、报错 使用Dockerfile自己做的服务镜像&#xff0c;docker run时启动失败&#xff0c;报错如下&#xff1a; standard init linux.go:228 exec user process caused: exec format error2、原因一 当前服务器的CPU架构和构建镜像时的CPU架构不兼容。比如做镜像是在arm机器下…

微服务学习|Feign:快速入门、自定义配置、性能优化、最佳实践

RestTemplate方式调用存在的问题 先来看我们以前利用RestTemplate发起远程调用的代码 存在下面的问题 代码可读性差&#xff0c;编程体验不统一 参数复杂URL难以维护 Feign的介绍 Feign是一个声明式的http客户端&#xff0c;官方地址: https://github.com/OpenFeign/feign …

Java-Object类

Object类 所有类都直接或间接的继承自Object类&#xff0c;Object类是所有Java类的根基类。 也就意味着所有的Java对象都拥有Object类的属性和方法。 如果在类的声明中未使用extends关键字指明其父类&#xff0c;则默认继承Object类。 toString()方法 【1】Object类的toStr…

最新AIGC创作系统ChatGPT网站源码,Midjourney绘画系统,支持最新GPT-4-Turbo模型,支持DALL-E3文生图

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…

天天谈体验,为什么客户还是给差评?

相比于线上场景&#xff0c;线下门店在数字化上更加复杂困难。不过&#xff0c;线下空间自有其得天独厚的优势条件——客户可以在这里最大程度获取对产品乃至品牌调性的亲身体验。 线上商城或直播中的产品效果图是否与实物一致&#xff1f;品牌许诺的产品功能价值是否真的能实现…

ubuntu下docker环境使用GPU配置

本文主要讲述整个命令流程&#xff0c;具体讲解请看官网nvidia-容器工具包和一篇总结得很详细的博文docker使用GPU总结 docker的版本必须安装19.0版本以上的&#xff0c;这里也只讲19.0版本以上的使用方法 首先设置一下网络信息 curl -fsSL https://nvidia.github.io/libnvi…

QT mysql 数据库线程池 与数据库操作封装

最近事情比较多很久没有写学习笔记了&#xff0c;数据库线程池&#xff0c; 数据库封装&#xff0c;虽说数据库操作有很多不需要写sql 的&#xff0c;ORM 封装的方式去操作数据库。但是从业这些年一直是自己动手写sql &#xff0c;还是改不了这个习惯。不说了直接上代码。 数据…

SpringBoot Admin

前言 Spring Boot Admin 是一个管理和监控 Spring Boot 应用程序的开源项目&#xff0c;它提供了一个简洁的 Web 界面来监控 Spring Boot 应用程序的状态和各种运行时指标。Spring Boot Admin 可以帮助开发者快速了解应用程序的状态&#xff0c;并快速定位错误或性能问题。下面…