初体验
Introduction
Vite
是一个开箱即用(out of box)
的构建工具
,不需要使用额外配置就可以帮助我们处理构建工作。Vite
在开发阶段
基于浏览器原生ESM
的支持实现了no-bundle
服务,进行模块的按需加载
,开发环境使用esbuild
打包,提高构建速度Vite
在生产环境
中使用Rollup进行打包,并采取一系列的打包优化手段
创建项目并启动
创建一个空项目initial_experience
,使用pnpm init
初始化项目,然后下载Vite
mkdir initial_experience
cd initial_experience
pnpm init
pnpm install vite
- 目录结构
initial_experience
├── index.html
├── package.json
├── pnpm-lock.yaml
└── src
├── count.js
└── main.js
index.html
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>initial experience</title>
</head>
<body>
<div>initial experience</div>
<script src="./src/main.js" type="module"></script>
</body>
</html>
main.js
import { num } from "./count";
console.log('main.js', num)
count.js
export const num = 100;
- 在
package.json
中添加命令
"scripts": {
"dev": "vite",
"build": "vite build",
"test": "echo \"Error: no test specified\" && exit 1"
},
- 启动项目
pnpm dev --host
- 启动后可以在控制台看到打印出
main.js 100
TIP
index.html
需要在项目根目录中在
index.html
中,要声明一个type="module"
的script
标签
修改入口路径
在
Vite
中,默认的入口文件
是项目根目录
下的index.html
文件,关于入口文件
和index.html
的说明点击这里查看;该
index.html
中声明了一个type="module"
的script
标签,并且该script
标签的src
指向./src/main.js
,此时访问http://ip:port
,相当于请求http://ip:port/src/main.js
这个资源;Vite
的Dev Server
接受到这个请求,然后读取请求资源文件的内容,并对其进行一定的处理,然后将处理的结果返回给浏览器;
<script src="./src/main.js" type="module"></script>
如果想要修改项目入口文件路径,可以通过配置root
配置项目根目录的位置来实现
vite.config.js
import path from "node:path";
/**
* @type {import('vite').UserConfig}
*/
const config = {
root: path.resolve(__dirname, 'src'),
}
export default config
引入第三方模块
pnpm install lodash-es
main.js
import { num } from "./count.js"
console.log('main.js', num)
count.js
import _ from 'lodash-es'
export const num = 100
console.log('count.js')
先中止运行的本地服务,直接双击
index.html
,在浏览器中打开如果先去除掉
lodash-es
的引入,控制台是会正常打印,如下
count.js
main.js 100
- 如果放开
lodash-es
的引入,然后刷新页面,发现报错如下:
Uncaught TypeError: Failed to resolve module specifier "lodash-es".
Relative references must start with either "/", "./", or "../".
可以看到,浏览器原生
esmodule
只支持/
,./,
或者../
开头的路径此时运行
pnpm dev --host
重新启动Vite
开发服务可以在
count.js
中看到引入的lodash-es
路径被替换了,这个操作是Vite
来做的,这是Vite
的依赖预构建
功能
vite.config.js
语法提示
- 我们想要在
vite.config.js
中写配置的时候有相应的API
提示,可通过以下两种方法
- 使用
vite
自带的defineConfig
方法
import { defineConfig } from "vite";
export default defineConfig({
optimizeDeps: {
exclude: ['lodash-es'] // 指定数组中的依赖不进行构建
}
})
- 引入类型标注
/**
* @type {import('vite').UserConfig}
*/
const config = {
optimizeDeps: {
exclude: ['lodash-es']
}
}
export default config
- 效果如下
vite.config.js
中为什么可以用esmodule
语法
vite
读取vite.config.js
的时候,会先解析语法,如果是esmodule
语法,会先转换成commonjs
语法
其他
相关代码可查看initial_experience