vite 在github上可以看到一些社区中常见的开发者。看一下github组织 中的repositories。有vite官方的仓库:可以看看源码大致是怎么实现的;有 awesome-vite 一些很棒的 vite 项目:可以找一些用在自己的开发项目中;create-vite-app: 在搭建 vite 项目时候可以看到模板的实现细节;还有docs-esdocs-cn 官方的文档;以 vite-plugin-xx 开头的官方的 vite 插件
从官方组织中可以得到以下信息:
vue 社区中 antfupataksodatea…… 在开发
vite 是前端的一个工具,有可能和打包有关,推测和webpack 有关
已经有一些成熟的轮子,拿来即用
中英文文档和其他语言的文档已经基本完备
有create-vite-app 推测和 create-react-app 有关
可能有插件的概念,推测和 rollup 有某种关联
在看官方的文档之前(docs-es/docs-cn)还要在github 上待一会,按照 vite most stars 大约 55,041 repository results
需要排除 vitess: 这是一个 MySQL.有关的仓库
vue-vben-adminvue-pure-adminelectron-vite-vuevue-admin-boxfast-vue3v3-admin-vite :需要留意,推测能从这些项目学习怎么配置 vite
path.resolve('/foo/bar', './baz')
// Returns: '/foo/bar/baz'
path.resolve('/foo/bar', '/tmp/file/')
// Returns: '/tmp/file'
path.resolve('wwwroot', 'static_files/png/', '../gif/image.gif')
// If the current working directory is /home/myself/node,
// this returns '/home/myself/node/wwwroot/static_files/gif/image.gif'
vite
在github
上可以看到一些社区中常见的开发者。看一下github组织
中的repositories。有vite
官方的仓库:可以看看源码大致是怎么实现的;有awesome-vite
一些很棒的 vite 项目:可以找一些用在自己的开发项目中;create-vite-app
: 在搭建 vite 项目时候可以看到模板的实现细节;还有docs-es
docs-cn
官方的文档;以vite-plugin-xx
开头的官方的 vite 插件从官方组织中可以得到以下信息:
antfu
patak
sodatea
…… 在开发webpack
有关create-vite-app
推测和create-react-app
有关rollup
有某种关联在看官方的文档之前(docs-es/docs-cn)还要在
github
上待一会,按照 vite most stars 大约 55,041 repository resultsvitess
: 这是一个MySQL.
有关的仓库vue-vben-admin
vue-pure-admin
electron-vite-vue
vue-admin-box
fast-vue3
v3-admin-vite
:需要留意,推测能从这些项目学习怎么配置vite
vitest
:推测是一个测试的框架unplugin-xx
:这种仓库,有可能提供了一种 帮我们自动化加载插件 plugin 的能力vite plugin
:项目的名字包含这两个关键字,会不会与我们说的插件机制有关element plus
结合vite
怎么写vscode-vite
: 有关 vite 在 vscode 中的插件juejin-book-vite
:《深入浅出 Vite》掘金小册代码示例仓库 阶段小结: 1、vite 仓库的数量还比较少,但是像 mock 能力已经有插件,可以用于生产 2、有一些 admin 的项目模板,但是需要阅读源码鉴别是否可以直接用于企业项目element-plus-vite-starter
element-plus-vite-starter
看到项目有
pnpm-lock.yaml
使用 pnpm (注意 node 的版本)有几个现象: 1、终端几乎是秒开,“It's fast!” 从体验上来说是的 2、初次打开浏览器页面的时候,tab 加载了一会
控制台网络查看全部
script
、png
、svg+xml
……可以看到控制台一下子加载了很多内容
先来看
element-plus
是怎么加载的再来看看
.scss
文件是怎么加载的阶段小结:单单从
element-plus
的浏览器加载感觉怪怪的。 不过可以看到很多的import语句
,这点很重要。当浏览器加载到文件的时候
然后控制台筛选到
main.ts
,响应的结果:在 vite 中,一个 import 语句代表一个 http 请求 (深入浅出 vite)
阶段小结:看到这儿已经可以了,有几点不一样的地方
1、浏览器会一下加载很多的文件 2、有的是来自磁盘缓存
有几个问题? 1、有关 vite 的打包问题,开发状态和正式上了生产有啥区别 2、上了上产环境也是这样吗,加载很多的文件 3、vite 为啥很快
为了形成对比,我打开我们公司线上的项目,来简单的对比一下
首先加载文档
企业线上项目
css 文件,关注一下 大小来自
disk cache
加载 js 文件
可以看到线上的 js 加载的文件没有那么多,能得到一个结论,控制台的请求日志,线上的环境没有开发环境的加载的资源多。还有
vite
是稳稳的上生产的,问题不大element-plus-vite-starter/vite.config.ts
回过头来,看看
vite
在 element-plus-vite-starter 是怎么应用的一个是
dev:vite
,执行这个脚本起一个开发时候的服务器 一个是@vitejs/plugin-vue
这个推测 是 vite 的一个插件,可能与 vue 有关接着打开
vite.config.ts
1、和
webpack
比 ,vite 的配置文件是 ESM 2、接着是defineConfig
,这个是 vite 抛出的用来定义配置 3、接着 plugins 装载了很多插件,用来服务这个项目有关别名中的
path.resolve
你可以看看 node 的 path
__dirname
是 node 的The module scope
阶段小结:通过开源项目 vite 配置,大体了解
vite.config.ts/js
在项目启动的某个时机执行 后面我们只需要,用到什么配置了解什么配置就好。装包,然后配置。看文档了解用法。rollup
在看了一个 vite 的实际项目之后,还要了解一个内容
rollup
其实 rollup 还是挺好的,想写一个
npm 包
的话,可以使用rollup
。vite 和它的联系十分紧密,需要先看看。在几年前,我查到一篇文章讲的就是如何使用 rollup 发布一个 npm 包,这是仓库 (注意:有的配置可能发生变化,但可以参考学习一下)
如果通读一下rollupjs文档,会发现一个文件
rollup.config.js
1、我个人认为:rollup 和 vite 的设计异曲同工之妙 2、rollup 学习的优先级可以低于 vite,先把 vite 应用到真实的项目中
vite
本小节看一下
vite
的源码,不过不用担心,很你一定看得懂。其实上文说了,vite 是 vite 官方组织中标星最多的,这很正常,所以 clone 一下然后项目内搜索一下
rollup.config.ts
文件,它在你的项目根目录/packages/vite
下node:xx
推测是高版本 node 的写法可以通过这种方式读取
package.json
中的当前项目的信息先在这个文件搜一下
defineConfig
同样的道理
clientConfig
sharedNodeOptions
createNodeConfig
都是同样的道理然后在看一下
export default
,其实 这才是这个文件的出口,作用就是生成rollup
的配置 还有一些“辅助函数” 比如bundleSizeLimit
cjsPatchPlugin
shimDepsPlugin
阶段小结:结合看 rollup 的文档 和 vite 源码中 rollup 的配置粗略的了解了一下。
rollup
又回到
rollup
,可以初始化一个项目,简单跑一下,使用
rollup -c
脚本执行一下rollup.config.js
文件antfu/utils
还是
rollup
,上文都是看了别人怎么配置的,还有个项目我猜测作者更多的在维护
vueuse
,当然了这个仓库很值得学习。搜一下rollup.config.js
具体在实际项目中使用什么插件根据需要。 接着
然后构造插件数组
最后导出一个数组
vite 文档
有的文档是社区文档,一般是去
github
然后看官方文档https://vitejs.dev/。还是看中文 https://cn.vitejs.dev/是什么
使用原生 ESM 文件,开发阶段无需打包 + 非常快的 HMR + 插件 + TypeScript 提供了工程化的全链条 的工具链
为什么是 vite
https://cn.vitejs.dev/guide/why.html#why-bundle-for-production vite 应用中依赖和源码 [依赖] 第三方的库包(node_modules 中):开发时候不会变动的纯 JS,vite 使用
esbuild
预构建 [源码]什么是源码/业务代码:jsx css vue 需要转换 原生的 esm 浏览器直接接管打包程序的部分工作 no-bundle一方面,vite 在开发阶段基于浏览器原生的 ESM 支持 no-b 服务 另一方面,借助 esbuild 编译速度 第三方库的构建和 ts/jsx 语法编译
有关生产环境的打包:
插件
插件有官方的插件 1、为
vue3
提供 单文件组件支持 2、为vue3
提供 jsx 支持 3、兼容旧的浏览器等和社区中的插件,我们在开头说过了,你也可以看一下
插件的使用优先级就是;先是官方的插件,提供了官方的能力,还有就是社区成熟的插件,这个要看实际项目 关于插件的开发:文档中也说了,先看看社区有没有,没有同类的话再进行开发
指引与配置
但是 Vite 呢:
no-bundle
服务(开发阶段:基于原生浏览器)生产环境:vite 基于 rollup 打包 开发阶段:不打包、开发模块按需编译
vite-starter
当我决定在公司用 vite 时候,还没具体看过“风险”。不过觉得问题不大,首先我会用终端起多个项目,首先想到怎么自定义开发服务器的
port
。https://cn.vitejs.dev/config/server-options.html#server-port
接着是,别名,兼容
vue2
的方式,导入一个文件可以这样配置
还有一个值得注意的就是
base
这个,如果你的项目是https://www.a.com/hello/home
那么需要配置,就像这样
不过值得注意的是,在你装载路由的时候,同样需要关注
关于
import.meta.env
可以看 https://cn.vitejs.dev/guide/env-and-mode.html#env-variables还有在 vite 启动,装载
css
接着就是装载插件了,一般情况下,我们写个
function
, 用来创建插件关于插件的装载,可以参考上述主流的开源的项目。不过我们扩展的能力,比如原子化 css 或者第三方组件库,这个根据需要,想要了解方案细节的话还是需要看看相关的生态
我觉的目前像
掘金
或者其他社区博客中有很多类似的帖子,怎么使用sass
或者使用windicss
等等。最后在 打包的时候
小结
1、
vue3
或者vite
环境的项目,推荐一些新的插件,等等,这些开源项目中也是这么做的2、有关这次
vite
上线,没有我想象的“可怕”,模块比较少的缘故,vite 整体上次比较顺利,但在开发时候的体验和webpack
大不同,一切顺利3、本篇说的,大致是我近 3 个月学习 vite 的路径,仍有很多内容还未用到,不过整体梳理了下,包括:
vite-learn
核心仓库 持续记录 学习 vite 的心得vite.config
整理 vite 常见的配置vite-starter
项目中是怎么使用的4、还有就是
vite
是偏工具性质的,重要的是理解模块化
和 vite 的能力,和底层的架构rollup
+esbuild