从一个webpack loader中学习

chalk:给终端输出加一些自定义的样式
loader-utils:webpack的loader配置中会通过options传入一些用户自定义参数,就可以通过该包提供的getoptions()获取
node-fetch:Node.js的模块,用于从远程服务器获取数据
关于babel,它是JS的编译器,主要用于将js转译为浏览器可以执行的代码,兼容各种浏览器等,最常见的就是将ES6转译为ES5(浏览器只能识别并执行es5的代码)

借鉴文章

Babel 编译代码的过程可分为三个阶段:解析(parsing)(@babel/parser)、转换(transforming)(@babel/parser)、生成(generating)(@babel/parser)

  1. @babel/traverse:用来自动遍历抽象语法树(AST)的工具
js 复制代码
traverse(ast, {
	// 对语法树中特定的节点进行操作
    VariableDeclarator(path: NodePath) {
      // 指向当前 AST 节点
      const node = path.node;
      const { id, init } = node;
      if (id.name === '$$$' && datas && typeof datas === 'object') {
        const { properties } = init;
        const newProps = genObjectProperties(datas);
        init.properties = properties.concat(newProps);
      }
    }
  } as Visitor);
  1. @babel/parser:将源代码解析成AST
  2. @babel/generator:将AST 解码成js代码
函数返回值类型为t.ObjectProperty,什么意思?
js 复制代码
function genObjectProperties(svgIcons: ISvgIcons): t.ObjectProperty[] {
  return Object.keys(svgIcons || {}).map((item) => {
    return t.objectProperty(
    	t.stringLiteral(item), // 创建一个字符串字面量节点
    	genIconProperties(svgIcons[item])
    );
  });
}
相关推荐
甲枫叶13 分钟前
【claude产品经理系列13】核心功能实现——需求的增删改查全流程
java·前端·人工智能·python·产品经理·ai编程
2501_9436953321 分钟前
大专商务数据分析与应用专业,怎么学习电商数据的埋点知识?
学习·数据挖掘·数据分析
陈天伟教授22 分钟前
人工智能应用- 材料微观:08.SliceGAN 的学习过程
人工智能·深度学习·学习
刘孬孬沉迷学习30 分钟前
路由算法学习( Dijkstra 算法 Bellman-Ford方程算法)
网络·学习·智能路由器·信息与通信·dijkstra算法·路由算法·bellman-ford算法
蓝帆傲亦31 分钟前
Vue.js 大数据处理全景解析:从加载策略到渲染优化的完全手册
前端·vue.js·flutter
不会敲代码132 分钟前
React组件通信实战:从Todo应用彻底搞懂父子、子父、兄弟通信
前端·react.js
SuperEugene32 分钟前
字符串处理实战:模板字符串、split/join、正则的 80% 用法
前端·javascript·面试
wuhen_n33 分钟前
前端构建工具:从Rollup到Vite
前端
钟智强33 分钟前
深度剖析CVE-2023-41064与CVE-2023-4863:libwebp堆溢出漏洞的技术解剖与PoC构建实录
前端·后端
钟智强33 分钟前
MySQL客户端惊现高危漏洞CVE-2023-21980,可导致远程代码执行
前端·后端