Vite插件开发纪实:vite-plugin-monitor(上)

简介: Vite插件开发纪实:vite-plugin-monitor(上)

背景


最近在webpack项目里接入了Vite(dev mode),为开发提效。效果是真的猛。

项目启动速度提升70%-80%,HMR直接碾压webpack dev server


为了更加精准的计算收益,就需要将Vite启动相关的指标进行上报(启动时间,HMR,页面加载等等时间)


为此就要通过开发插件收集这些信息,然后通过埋点上报sdk上报到数据分析的平台


遇到的问题


通过查阅官方文档并未找到相关的钩子直接获取到这些指标


但在开发的时候添加 --debug就能很详细的看到所有资源的处理时间,HMR,详细的启动时间等等


{
    "scripts": {
        "dev": "vite --debug",
    }
}


npm run dev


网络异常,图片无法展示
|


为此只能通过一些hack的手段获取这些指标了,下面将展开详细的介绍


期望


通过向目标工程引入插件,通过特定的回掉函数即可获取到debug模式下反馈的各种信息


准备工作


比较详细的介绍一下开发步骤


初始化工程


创建插件目录


mkdir vite-plugin-monitor
cd vite-plugin-monitor


初始化pkg.json


npm init -y


安装必要依赖


yarn add -D vite typescript @types/node rimraf


添加必要的两个指令dev,build,配置入口文件dist/index.js


{
    "main": "dist/index.js",
    "scripts": {
        "dev": "tsc -w -p .",
        "build": "rimraf dist && tsc -p ."
    }
}


其中dev环境下添加了-w(--watch)参数,当文件有变动时,以便实时的进行更新

rimraf的作用是替代rm -rf指令,且是跨平台的,windows下同样生效


插件使用typescript开发,更有助于插件后续的维护


其中build直接使用typescript提供的默认tsc指令,对ts直接进行转换

根目录创建 tsconfig.json 内容如下


{
    "compilerOptions": {
      "target": "es2015",
      "moduleResolution": "node",
      "strict": false,
      "declaration": true,
      "noUnusedLocals": true,
      "esModuleInterop": true,
      "outDir": "dist",
      "module": "commonjs",
      "lib": ["ESNext","DOM"],
      "sourceMap": true,
    },
    "include": ["./src"]
  }


src 目录下进行开发,里面存放我们的源码


目录结构


最终目录如下


├── package.json
├── src
|  ├── index.ts     # 插件入口
|  ├── types        
|  |  └── index.ts  # 类型定义
|  └── utils
|     └── index.ts  # 工具方法
├── tsconfig.json


简单插件示例


根据插件开发文档,在src/index.ts文件下编写如下简单的代码;


  • name:标识插件的名称
  • apply:标识插件在哪个时期工作(serve|build),默认都会调用
  • config:这个钩子接收原始用户配置(命令行选项指定的会与配置文件合并)和一个描述配置环境的变量


import type { Plugin } from 'vite';
export default function Monitor(): Plugin {
  return {
    name: 'vite-plugin-monitor',
    apply: 'serve',
    config(userConfig, env) {
      console.log(userConfig);
      console.log(env)
      // 可以做进一步的修改,会自动合入当前的配置
      // return
    },
  };
}


一个打印Vite配置的插件就搞定了,下面就是测试我们开发的插件


本地测试插件


首先是转换我们的ts=> js ,执行前面配置的指令yarn dev,就会看见生成了一个dist目录,里面有转换后的代码


接着执行npm link在全局生成一个软连接,指向当前项目


npm link


在一个vite项目里的执行npm link vite-plugin-monitor(monitor根据实际情况替换),向目标项目加入此依赖


npm link vite-plugin-monitor


接着就可以在Vite项目的vite.config.js配置文件中加入我们的插件了


import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import vitePluginMonitor from 'vite-plugin-monitor'
// https://vitejs.dev/config/
export default defineConfig({
  plugins: [
    vue(),
    vitePluginMonitor()
  ]
})


接着通过配置的指令启动vite,就能看到我们插件的打印的配置文件内容了


网络异常,图片无法展示
|


由于是通过软连接的方式引入的插件,那么在插件工程里的任意更改都会实时生效,也就避免了频繁的执行yarn add file:localProjectDir


小结


本篇主要介绍了monitor插件开发的背景,要解决的问题,目标以及开发插件所需的一些列准备工作


下一篇文章将详细介绍功能的实现


查看:仓库源码

相关文章
|
17天前
|
前端开发 JavaScript 容器
在 vite+vue 中使用@originjs/vite-plugin-federation 模块联邦
【10月更文挑战第25天】模块联邦是一种强大的技术,它允许将不同的微前端模块组合在一起,形成一个统一的应用。在 vite+vue 项目中,使用@originjs/vite-plugin-federation 模块联邦可以实现高效的模块共享和组合。通过本文的介绍,相信你已经了解了如何在 vite+vue 项目中使用@originjs/vite-plugin-federation 模块联邦,包括安装、配置和使用等方面。在实际开发中,你可以根据自己的需求和项目的特点,灵活地使用模块联邦,提高项目的可维护性和扩展性。
|
1月前
|
资源调度 JavaScript 前端开发
如何实现一个类似 vite 的脚手架并发布 npm
本文介绍了如何实现一个类似 Vite 的脚手架工具。通过详细解析和实践,文章分享了从零开始构建脚手架的过程,包括技术选型、开发步骤及发布 NPM 包的完整流程。最终目标是让用户能够通过 `yarn create electron-prokit myapp` 快速搭建 Electron 项目。项目源码可在 GitHub 上获取。
23 5
|
2月前
vite.config.js中vite.defineConfig is not defined以及创建最新版本的vite项目
本文讨论了在配置Vite项目时遇到的`vite.defineConfig is not defined`错误,这通常是由于缺少必要的导入语句导致的。文章还涉及了如何创建最新版本的Vite项目以及如何处理`configEnv is not defined`的问题。
104 3
vite.config.js中vite.defineConfig is not defined以及创建最新版本的vite项目
|
6月前
|
JavaScript 前端开发 Java
ruoyi-vue-pro 项目安装使用过程中的问题解决
ruoyi-vue-pro 项目安装使用过程中的问题解决
413 0
|
3月前
|
JSON 前端开发 算法
vite打包优化vite-plugin-compression的使用
【8月更文挑战第4天】vite打包优化vite-plugin-compression的使用
438 4
|
4月前
|
JavaScript
Vite 项目中如何去集成 Sass
Vite 项目中如何去集成 Sass
62 0
|
11月前
|
JavaScript 小程序
VUE3(三十五)vite构建的项目配置使用.env文件
VUE3(三十五)vite构建的项目配置使用.env文件如标题所示:我要在vue3项目使用.env文件。 先介绍一下项目背景,项目使用VUE3.2 + vite2.9 + typescript搭建。 我基本断定,vue3使用.env文件的方法可能和vue2使用.env文件的方法可能是不同,关于vue2项目如何使用.env文件,请移步《VUE2(七)VUE配置env文件使用》
386 1
|
6月前
|
资源调度 JavaScript 前端开发
【源码共读】Vite 项目自动添加 eslint 和 prettier
【源码共读】Vite 项目自动添加 eslint 和 prettier
255 0
|
JavaScript
为老的vueCli项目添加vite支持
为老的vueCli项目添加vite支持
130 0
为老的vueCli项目添加vite支持
|
资源调度 JavaScript 前端开发
nuxt2-storybook-vite:环境搭建、基础使用 / nuxt项目组件库
nuxt2-storybook-vite:环境搭建、基础使用 / nuxt项目组件库
316 0

相关实验场景

更多