美文网首页
看似nb的unbuild插桩技术,不过rewriting fun

看似nb的unbuild插桩技术,不过rewriting fun

作者: 习惯水文的前端苏 | 来源:发表于2024-01-10 14:05 被阅读0次

看过element-plus的朋友都知道,它在开发阶段使用的是unbuild进行的打包编译。相比较传统的rollupwebpack等老牌构建工具而言,unbuild更快!!

但这个快并不是指的编译上更快,毕竟它说到底仍然是基于rollup的,和借力了esbuildvite相比它并不适合使用这个修饰词

这里的快,指的是次数,和其他构建工具监听文件变更后reCompile不同,unbuild只在启动时执行一次

而提供该能力的核心即jiti

jiti 是做什么的

jiti是一个npm包,它实现的核心能力即代码插桩

代码插桩是指在运行时动态修改代码的技术

如何启用

package.json文件的scripts配置中指定--stub,示例如下

{
  "scripts": {
    "dev": "unbuild --stub"
  }
}

编译结果如下

import jiti from "jiti这个包对应的系统文件地址";

jiti(...)('目标工程的入口文件');

源码解析

注意,本文的重点是分析jiti的核心原理,因此对于unbuild不会进行深入探讨,同时,既是核心原理,因此对于jiti的实现细节也不在探讨范围

我们关心的是:

1-jiti 是什么

2-实时编译是如何实现的

  • 首先,jiti 是什么?

这要从其package.json包开始看起

image.png

从框红的webpack可以知道,它就是一个普通的不能再普通的常规npm包,并没有使用啥高大上的技术,换言之,它和插桩技术本身毫无关联

因此,只能从入口找答案,它由main字段标识,指向lib文件夹

{
  "main": "./lib/index.js"
}
  • 实时编译是如何实现的

从它是由webpack构建的就可以猜出来,像es语法降级,ts to js转换这些操作一定是基于wb的某个loader或者plugin实现的,所以这一部分肯定也与插桩技术本身无关

故,去掉编译相关的逻辑之后,我们很容易就发现了如下代码。显然,jiti对源代码创建模块并重写了require方法

const mod = new Module(...);
mod.require = createJITI(...);

createJITI函数,其实就是对模块的编译过程,这就做到了,当访问某个模块的时候,再进行编译,即运行时,也即插桩

总结

搞了半天,原来插桩就是个函数重写😂

相关文章

  • 吹爆系列:Android 插桩之美,全面掌握!

    一、插桩 插桩是什么?你在开发中有用过插桩的技术吗? 所谓的插桩就是在代码编译期间修改已有的代码或者生成新代码。 ...

  • Frida hook入门

    frida是有效的插桩工具。 插桩技术插桩技术是指将额外的代码注入程序中以收集运行时的信息,可分为两种:(1)源代...

  • 自定义Gradle插件

      最近在学习字节码插桩技术,利用字节码插桩技术,我们可以在编译时期对字节码进行修改,达到完成一些特殊需求,比如埋...

  • 字节码插桩极简入门

    不写废话,帮助你快速理解应对面试 目录 什么是编译插桩插桩的应用场景插桩的工具 什么是编译插桩 用通俗的话来讲,插...

  • Android 插桩(gradle + asm)统计方法耗时

    最近学习插桩就尝试了一下用插桩的方式做一个统计Activity生命周期方法耗时的小demo 本文所用技术要点1、自...

  • 编译插桩介绍

    概念 编译插桩就是在代码编译期间修改修改已有的代码或者生成新的代码。编译插桩技术从对代码修改的时机上来说可以分为两...

  • 成为架构师的路上,你究竟了解多少字节码插桩?

    一、什么是插桩? 很多人听到关于“插桩”的词语,第一眼觉得会很高深,那到底什么是插桩呢?用通俗的话来讲,插桩就是将...

  • 字节码插桩--你也可以轻松掌握

    1 什么是插桩? 听到关于“插桩”的词语,第一眼觉得会很高深,那到底什么是插桩呢?用通俗的话来讲,插桩就是将一段代...

  • 40 编译插桩技术-分类

    编译插桩技术具体可以分为两类,如下所示: 1)、APT(Annotation Process Tools) :用于...

  • 编译插桩技术的分类与应用场景

    编译插桩技术具体可以分为两类,如下所示: 1)、APT(Annotation Process Tools) :用于...

网友评论

      本文标题:看似nb的unbuild插桩技术,不过rewriting fun

      本文链接:https://www.haomeiwen.com/subject/rvrzndtx.html