夜猫子的知识栈 夜猫子的知识栈
首页
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《Web Api》
    • 《ES6教程》
    • 《Vue》
    • 《React》
    • 《TypeScript》
    • 《Git》
    • 《Uniapp》
    • 小程序笔记
    • 《Electron》
    • JS设计模式总结
  • 《前端架构》

    • 《微前端》
    • 《权限控制》
    • monorepo
  • 全栈项目

    • 任务管理日历
    • 无代码平台
    • 图书管理系统
  • HTML
  • CSS
  • Nodejs
  • Midway
  • Nest
  • MySql
  • 其他
  • 技术文档
  • GitHub技巧
  • 博客搭建
  • Ajax
  • Vite
  • Vitest
  • Nuxt
  • UI库文章
  • Docker
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

夜猫子

前端练习生
首页
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《Web Api》
    • 《ES6教程》
    • 《Vue》
    • 《React》
    • 《TypeScript》
    • 《Git》
    • 《Uniapp》
    • 小程序笔记
    • 《Electron》
    • JS设计模式总结
  • 《前端架构》

    • 《微前端》
    • 《权限控制》
    • monorepo
  • 全栈项目

    • 任务管理日历
    • 无代码平台
    • 图书管理系统
  • HTML
  • CSS
  • Nodejs
  • Midway
  • Nest
  • MySql
  • 其他
  • 技术文档
  • GitHub技巧
  • 博客搭建
  • Ajax
  • Vite
  • Vitest
  • Nuxt
  • UI库文章
  • Docker
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 技术文档

  • GitHub技巧

  • 博客搭建

  • Ajax

  • Vite

    • 初识vite基础知识
      • Vite使用
      • Vite 解决了 Webpack 哪些问题
        • 打包问题
      • plugin
      • 环境变量
        • 环境变量
        • .env文件
    • vitest单元测试
    • vite+vue3自动引入插件配置
    • 路径别名
    • 去除代码中的config
    • 打包配置
    • vue3+ts+sass初始化
    • vite动态导入图片
    • 对动态绑定资源的引用
    • 跨域
  • Vitest

  • Nuxt

  • UI库文章

  • Docker

  • 技术
  • Vite
夜猫子
2022-06-26
目录

初识vite基础知识

# 初识 Vite 基础知识

vite 特点:

  1. 快速的冷启动
  2. 即时的模块热更新
  3. 真正的按需编译

vite 主要特点是基于浏览器 native 的 ES module (opens new window) 来开发,省略打包这个步骤,因为需要什么资源直接在浏览器里引入即可。

vite 开发环境利用浏览器的 import 机制,打包时也有内置的 rollup ,所以可以直接使用。

这里主要还是了解一下 rollup 和 webpack 的区别,rollup 的模块打包能力并没有 webpack 强大,但是利用了 tree-shaking 充分处理 js 文件,打包出来的 js 文件会比较 “干净”。

# Vite使用

$ npm  create vite-app <project-name>
$ cd <project-name>
$ npm install
$ npm run dev
1
2
3
4

npm create 其实就是 npm init 命令,而 npm init 命令带上包名执行的就是 npm exec,也就是执行 vite 包的默认命令 —— 初始化。

Vite项目结构树

➜  vite-app tree
.
├── index.html  // 页面入口,注意是在项目最外层
├── vite.config.js // 配置文件
├── package.json
├── public
│   └── favicon.ico
└── src
    ├── App.vue
    ├── assets
    │   └── logo.png
    ├── components
    │   └── HelloWorld.vue
    ├── index.css
    └── main.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# Vite 解决了 Webpack 哪些问题

本质上,webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler)

Vue 脚手架工具 vue-cli 使用 webpack 进行打包,开发时可以启动本地开发服务器,实时预览。因为需要对整个项目文件进行打包,开发服务器启动缓慢。

而对于开发时文件修改后的热更新 HMR 也存在同样的问题。Webpack 的热更新会以当前修改的文件为入口重新 build 打包,所有涉及到的依赖也都会被重新加载一次。

Vite 则很好地解决了上面的两个问题。

# 打包问题

vite 只启动一台静态页面的服务器,对文件代码不打包,服务器会根据客户端的请求加载不同的模块处理,实现真正的按需加载。

# plugin

vite 背后的原理都在 plugin 里。

plugin大致分类如下

  • 用户注入的 plugins —— 自定义 plugin
  • hmrPlugin —— 处理 hmr
  • htmlRewritePlugin —— 重写 html 内的 script 内容
  • moduleRewritePlugin —— 重写模块中的 import 导入
  • moduleResolvePlugin ——获取模块内容
  • vuePlugin —— 处理 vue 单文件组件
  • esbuildPlugin —— 使用 esbuild 处理资源
  • assetPathPlugin —— 处理静态资源
  • serveStaticPlugin —— 托管静态资源
  • cssPlugin —— 处理 css/less/sass 等引用

接下来看看 plugin 的实现方式,开发一个用来拦截 json 文件 plugin 可以这么实现

interface ServerPluginContext {
	root: string
	app: Koa
	server: Server
	watcher: HMRWatcher
	resolver: InternalResolver
	config: ServerConfig
}
type ServerPlugin = (ctx:ServerPluginContext)=> void;
const JsonInterceptPlugin:ServerPlugin = ({app})=>{
	app.use(async (ctx, next) => {
		await next()
		if(ctx.path.endsWith('.json') && ctx.body) {
			ctx.type = 'js'
			ctx.body = 'export default json'
			}
	})
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# 环境变量

# 环境变量 (opens new window)

Vite 在一个特殊的 import.meta.env 对象上暴露环境变量。这里有一些在所有情况下都可以使用的内建变量:

  • import.meta.env.MODE: {string} 应用运行的模式 (opens new window)。
  • import.meta.env.BASE_URL: {string} 部署应用时的基本 URL。他由base 配置项 (opens new window)决定。
  • import.meta.env.PROD: {boolean} 应用是否运行在生产环境。
  • import.meta.env.DEV: {boolean} 应用是否运行在开发环境 (永远与 import.meta.env.PROD相反)。
  • import.meta.env.SSR: {boolean} 应用是否运行在 server (opens new window) 上。

# .env文件

Vite 使用 dotenv (opens new window) 从你的 环境目录 (opens new window) 中的下列文件加载额外的环境变量:

.env                # 所有情况下都会加载
.env.local          # 所有情况下都会加载,但会被 git 忽略
.env.[mode]         # 只在指定模式下加载 (‘development 或者 production)
.env.[mode].local   # 只在指定模式下加载,但会被 git 忽略
1
2
3
4

常见的后缀:

.env # 所有环境都会加载
.env.development # 开发环境
.env.production # 生产环境
1
2
3

自定义环境变量: 注意:必须以 VITE_ 为前缀才会生效

// 如:
VITE_SOME_KEY=123
VITE_BASE_URL=https://www.baidu.com
1
2
3

获取环境变量:

console.log(import.meta.env.VITE_BASE_URL)
1

在 HTML 中使用:

Vite 还支持在 HTML 文件中替换环境变量。import.meta.env 中的任何属性都可以通过特殊的 %ENV_NAME% 语法在 HTML 文件中使用:

<h1>Vite is running in %MODE%</h1>
<p>Using data from %VITE_API_URL%</p>
1
2
编辑 (opens new window)
#打包
上次更新: 2023/7/11 18:57:41
指数退避延时loading
vitest单元测试

← 指数退避延时loading vitest单元测试→

最近更新
01
IoC 解决了什么痛点问题?
03-10
02
如何调试 Nest 项目
03-10
03
Provider注入对象
03-10
更多文章>
Copyright © 2019-2025 Study | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式