码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 从一个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)的工具
    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    1. @babel/parser:将源代码解析成AST
    2. @babel/generator:将AST 解码成js代码
    函数返回值类型为t.ObjectProperty()和t.objectExpression,什么意思?

    t.objectProperty() // 创建一个对象
    t.objectExpression() // 创建一个对象表达式

    import * as t from '@babel/types';
    
    function genObjectProperties(svgIcons: ISvgIcons): t.ObjectProperty[] {
      return Object.keys(svgIcons || {}).map((item) => {
        return t.objectProperty(
        	t.stringLiteral(item), // 创建一个字符串字面量
        	genIconProperties(svgIcons[item])
        );
      });
    }
    
    function genIconProperties(iconInfo: IIconInfo): t.ObjectExpression {
      // 创建对象表达式
      return t.objectExpression(Object.keys(iconInfo || {}).map((item) => {
        return t.objectProperty(t.stringLiteral(item), t.stringLiteral(iconInfo[item].toString()));
      }));
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    可借鉴该文章辅助理解

  • 相关阅读:
    Java——》synchronized的使用
    Linux红帽(RHCE)认证学习笔记
    实操技巧:私域+公域=全渠道获客
    ACM MM 2022视频理解挑战赛视频分类赛道冠军AutoX团队技术分享
    XML配置文件
    色彩大师:纽约公寓的大胆装修之旅
    Knife4j使用教程(二) -- 配置Swagger相关信息
    【Unity入门计划】Unity实例-C#如何通过封装实现对数据成员的保护
    2023年PMP考试重要时间节点来了!别说没提醒你!
    第八章 排序 一、排序的基本概念
  • 原文地址:https://blog.csdn.net/zhongqw_00/article/details/133983624
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号