首页 > 其他分享 >浅谈vite

浅谈vite

时间:2024-07-12 16:45:24浏览次数:11  
标签:插件 code 浅谈 server result options vite

在开发环境并不做打包,采用es6 中的module进行引入;具体它是怎么做? please continue to look down~~~ 编译服务、esbild预购建、rollup打包。

npm run dev

vite会跑一个开发服务;

const {createServer} = await import('./server');
try {
    const server = await createServer({
        root,
        base: options.base,
        mode: options.mode,
        configFile: options.config,
        logLevel: options.logLevel,
        clearScreen: options.clearScreen,
        optimizeDeps: options.optimizeDeps,
        server: options.server,
        ...other
    });
    if (!server.httpServer) {
      throw new Error('httpServer is not defined');
    }
    await server.listen();
}

请求html时候,会通过ast遍历,找到所有的script,提前对这些文件做编译(css插件 esbuild插件)

esbuild js打包工具,支持如babel 压缩等功能,特点快(底层是go)

export async function traverseHtml(html, filePath,visitor) {
  const {parse} = await import('parse5');
  const ast = parse(html, {
    scriptingEnabled: false,
    sourceCodeLocationInfo: true,
    onParseError(err) {
      console.error(err)
      handleParseError(err, html, filePath)
    }
  })
  traverseNodes(ast, visitor)
}
import { transformWithEsbuild } from "node:module"
transform(code, id) {
  if (filter(id) || filter(cleanUrl(id))) {
    const result =  await transformWithEsbuild(code, id, transformOptions);
    if(result.warning.length) {
      result.warning.forEach(m => {
        this.warn(prettifyMessage(m, code))
      });
    }
    if (jsxInject && jsxExtensionsRE.test(id)) {
      result.code = jsxInject +';'+ result.code;
    }
    return {
      code: result.code,
      map: result.map
    }
  }
}

tip: 如果node_modules依赖又commonjs模块规范代码?  需要提前做一些转换,把commonjs转esm.

vite加来一个预构建功能 pre bunle. 在启动开发服务器,马上对node_modules代码做打包,也叫依赖优化。从每个依赖包作为入口打包,输出 esm 格式的模块到 node_modules/.vite 下。

之后还会生成一个 _metadata.json 文件写入 node_modules/.vite 下,为了做强缓存;

 

 vite  query 字符串带上 hash,然后用 max-age 强缓存;除非lock文件变化或者config变化需要重新build,请求资源会带上新的query 强缓存失效;

vite热更新:基于chokidar监听本地文件变动;然后在模块变动的时候通过websocket通知浏览器端;

 npm run build:

vite插件兼容rollup插件,可以用同样的插件对代码做transform处理;

 

标签:插件,code,浅谈,server,result,options,vite
From: https://www.cnblogs.com/wangxinyubokeyuan/p/18298485

相关文章

  • 研发视角浅谈R2流量回放测试
    一、背景测试小伙伴们在2023年保障了团队线上系统0问题,这简直就是一项了不起的壮举!这得益于咱们测试组同事对工作的细致投入、风险把控、以及严格遵循流程规范进行测试用例评审、自动化建设、联调推动、回归验证、常态化压测、大促高保真压测、引流回放等多重保险策略工作。尤......
  • Vue3.4+Element-plus+Vite通用后台管理系统
    ......
  • 「UCD」浅谈蓝湖Figma交互设计对齐
    在现代数字产品的设计和开发过程中,选择合适的工具对于提高团队效率和保证产品质量至关重要。本文将从开发和设计两个不同的角度,探讨蓝湖和Figma两款流行工具的优势与不足,并提出结论和建议。开发研发视角:蓝湖优点:清晰的设计规范:蓝湖为开发工程师提供了清晰的设计规范,有......
  • 第6章 Vite的集成和使用
    本章将探讨如何将Vite集成到不同类型的项目中,以及如何确保其与各种技术和工具的兼容性。通过具体的实例和代码示例,你将学习到Vite的强大和灵活性。6.1与常用框架的集成6.1.1与React的集成Vite可以非常容易地与React项目集成。以下是一个简单的步骤来创建一个......
  • 第7章 Vite的测试和调试
    测试和调试是软件开发过程中的重要环节。通过合理的测试策略和调试技巧,可以大幅提高代码的质量和稳定性。本章将介绍如何在Vite项目中进行单元测试、集成测试和端到端测试,以及常用的调试方法和工具。1单元测试单元测试是对最小可测试单元进行验证的测试,通常用于测试......
  • Electron-ViteChat桌面端聊天室|electron31+vite5+pinia2仿微信EXE程序
    原创研发Electron31+vue3+elementPlus仿微信客户端聊天应用。使用最新跨平台技术electron31.x+vite5+vue3setup+pinia2+element-plus实战开发电脑版聊天室Exe程序。整个聊天程序界面清爽简约,支持展示/收缩侧边栏、electron新开多窗口、换肤等功能。electron-vitechat......
  • 浅谈qiankun微前端
    qiankun是single-spa二开;使用场景:不同技术栈,不同团队,独立开发部署、增量升级;总结:解耦;        主应用:具有整合-输入子应用的html入口;子应用  与single-spa基本一致,导出了三个生命周期函数 (bootstrapmountunmout)js沙箱:三个沙箱(快照沙箱、......
  • vitepress如何添加本地搜索
    第二次在csdn发文章,写的不好,还请理解,直接解决文章标题中的问题,直接上干货。themeConfig:{search:{provider:'local'},复制以上代码,然后找到config.mjs这个文件。如下图。找到这个文件后,接下来到重点了哈,加到这个config.mjs文件的什么位置:大家看仔细了......
  • vitepress如何添加favicon.ico图标
    第一次在csdn发文章,写的不好,还请理解,直接解决文章标题中的问题,直接上干货。head:[//添加图标['link',{rel:'icon',href:'/favicon.ico'}]],复制以上代码,然后找到config.mjs这个文件。如下图。找到这个文件后,我们先别着急,我们先要建立一个文件夹......
  • 第5章 Vite高级功能(一)
    文章目录1.别名与路径解析1配置别名2使用别名2代理与跨域配置2.1配置代理2.2使用代理3热模块替换(HMR)3.1HMR基本使用3.2HMR高级使用4动态导入与代码分割4.1动态导入4.2代码分割5预构建与依赖优化5.1预构建依赖5.2手动预构建依赖5.3调试预构建......