vite源码 - 开始

要学习 vite 源码,一开始需要看 vite 包的 package.json 文件。

package.json 文件中,会配置 bin 字段,该字段用来配置可执行命令。也是 vite 的入口文件。

package.json 复制代码
{
  "bin": {
    "vite": "bin/vite.js"
  },
}

bin/vite.js

这个文件是一个壳文件,主要做了以下几件事:

  1. 初始化调试和错误处理逻辑
  2. 处理命令行参数
  3. 处理编译缓存
  4. 加载真正的 cli 逻辑

这里的逻辑相对简单,最重要的就是加载真正的 cli 逻辑。

js 复制代码
function start() {
  try {
    // 开启编译缓存
    module.enableCompileCache?.()
    // 定时清除编译缓存
    setTimeout(() => {
      try {
        module.flushCompileCache?.()
      } catch {}
    }, 10 * 1000).unref()
  } catch {}
  // 加载真正的 cli 逻辑
  return import('../dist/node/cli.js')
}

cli

cli 文件的作用一句话就可以说清,那就是使用 cac 定义 cli 命令,并启动。这里的 cac 包是一个命令行框架。

伪代码 复制代码
// 初始化
const cli = cac('vite')
// 定义命令
cli
  .command(....)
// 启动
cli.parse()

定义的命令有以下几个:

  1. dev
  2. build
  3. optimize
  4. preview

这里重点看开发环境的命令。

dev 命令

csharp 复制代码
cli
  .command('[root]', 'start dev server') // 配置默认命令
  .alias('serve') // 配置别名 serve
  .alias('dev') // 配置别名 dev
  // 删除命令配置相关
  .action(async (root: string, options: ServerOptions & GlobalCLIOptions) => {
    filterDuplicateOptions(options)
    const { createServer } = await import('./server')
    try {
      const server = await createServer({
        root,
        base: options.base,
        mode: options.mode,
        configFile: options.config,
        configLoader: options.configLoader,
        logLevel: options.logLevel,
        clearScreen: options.clearScreen,
        server: cleanGlobalCLIOptions(options),
        forceOptimizeDeps: options.force,
      })

      await server.listen()
      server.printUrls()
      // 快捷键相关逻辑
      // ...
    } catch (e) {
      // 错误处理逻辑
    }
  })

可以看到,整个命令的核心代码非常简单,就是引入 createServer 函数,创建一个 server,并启动。

结束

以上的内容已经在 vite 源码中找到一个入口了,知道在调用 vite 时会发生什么,但是也有很多问题。比如:

  • 如何创建 server 的?
  • 配置文件怎么生效的?
  • 插件怎么执行的?
  • 如何处理静态资源文件?
  • 在请求时发生了什么?

等等问题,还需要进一步学习。

相关推荐
XiaoYu20029 分钟前
第11章 LangChain
前端·javascript·langchain
霉运全滚蛋好运围着转37 分钟前
启动 Taro 4 项目报错:Error: The specified module could not be found.
前端
cxxcode40 分钟前
前端模块化发展
前端
不务正业的前端学徒44 分钟前
docker+nginx部署
前端
不务正业的前端学徒1 小时前
webpack/vite配置
前端
hhcccchh1 小时前
学习vue第八天 Vue3 模板语法和内置指令 - 简单入门
前端·vue.js·学习
yyf198905251 小时前
Vue 框架相关中文文献
前端·javascript·vue.js
粥里有勺糖1 小时前
开发一个美观的 VitePress 图片预览插件
前端·vue.js·vitepress
行者961 小时前
Flutter适配OpenHarmony:国际化i18n实现中的常见陷阱与解决方案
开发语言·javascript·flutter·harmonyos·鸿蒙
陟上青云2 小时前
一篇文章带你搞懂原型和原型链
前端