CD's blog CD's blog
首页
  • HTMLCSS
  • JavaScript
  • Vue
  • TypeScript
  • React
  • Node
  • Webpack
  • Git
  • Nestjs
  • 小程序
  • 浏览器网络
  • 学习笔记

    • 《TypeScript 从零实现 axios》
    • Webpack笔记
  • JS/TS教程

    • 《现代JavaScript》教程
🔧工具方法
  • 网站
  • 资源
  • Vue资源
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

CD_wOw

内卷的行情,到不了的梦
首页
  • HTMLCSS
  • JavaScript
  • Vue
  • TypeScript
  • React
  • Node
  • Webpack
  • Git
  • Nestjs
  • 小程序
  • 浏览器网络
  • 学习笔记

    • 《TypeScript 从零实现 axios》
    • Webpack笔记
  • JS/TS教程

    • 《现代JavaScript》教程
🔧工具方法
  • 网站
  • 资源
  • Vue资源
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 基础理论

  • 框架篇

    • 小程序开发框架解析
    • Taro开发原理及方法
    • 小程序笔记
    • 框架篇
    CD
    2023-01-10
    目录

    Taro开发原理及方法

    # 解析页面 Config 配置

    在业务代码编译成小程序的代码过程中,有一步是将页面入口 JS 的 Config 属性解析出来,并写入 *.json 文件,供小程序使用。那么这一步是怎么实现的呢?这里将这部分功能的关键代码抽取出来:

    // 1. babel-traverse方法, 遍历和更新节点
    traverse(ast, {
      ClassProperty(astPath) {
        // 遍历类的属性声明
        const node = astPath.node;
        if (node.key.name === "config") {
          // 类的属性名为 config
          configObj = traverseObjectNode(node);
          astPath.remove(); // 将该方法移除掉
        }
      },
    });
    // 2. 遍历,解析为 JSON 对象
    function traverseObjectNode(node, obj) {
      if (node.type === "ClassProperty" || node.type === "ObjectProperty") {
        const properties = node.value.properties;
        obj = {};
        properties.forEach((p, index) => {
          obj[p.key.name] = traverseObjectNode(p.value);
        });
        return obj;
      }
      if (node.type === "ObjectExpression") {
        const properties = node.properties;
        obj = {};
        properties.forEach((p, index) => {
          // const t = require('babel-types') AST 节点的 Lodash 式工具库
          const key = t.isIdentifier(p.key) ? p.key.name : p.key.value;
          obj[key] = traverseObjectNode(p.value);
        });
        return obj;
      }
      if (node.type === "ArrayExpression") {
        return node.elements.map((item) => traverseObjectNode(item));
      }
      if (node.type === "NullLiteral") {
        return null;
      }
      return node.value;
    }
    // 3. 写入对应目录的 *.json 文件
    fs.writeFileSync(outputPageJSONPath, JSON.stringify(configObj, null, 2));
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42

    从以上代码的注释中,可以清晰的看到,通过以上三步,就可以将工程里面的 Config 配置转换成小程序对应的 JSON 配置文件。

    编辑 (opens new window)
    #小程序
    上次更新: 2023/03/27, 21:41:56
    小程序开发框架解析

    ← 小程序开发框架解析

    最近更新
    01
    gsap动画库学习笔记 - 持续~
    06-05
    02
    远程组件加载方案笔记
    05-03
    03
    小程序使用笔记
    03-29
    更多文章>
    Theme by Vdoing | Copyright © 2020-2023 CD | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式