Pont在小程序开发的使用

Pont是一个很好的前后端桥,但是有个问题。默认产生的代码,无法支持微信小程序开发。根本原因是因为使用了window给全局的对象注入了API和refs属性,由于小程序没有window属性,当然就无法使用了,解决办法也比较简单。只需要给微信全局对象注入这两个属性就可以了

使用uni-app的解决方案如下:

修改service/index.ts

import * as defs from './baseClass'
import './mods/'
// #ifdef H5
;(window as any).defs = defs // 只在编译期间,因此可以这样用
// #endif
// #ifdef MP-WEIXIN
Object.defineProperty(Object.prototype, 'defs', {
  value: defs,
  configurable: false,
  enumerable: false
})
// #endif

修改service/mods/index.ts

import * as commonApi from './commonApi'
import * as tools from './tools'
import * as userApi from './userApi'
// #ifdef H5
(window as any).API = {
  commonApi,
  tools,
  userApi
}
// #endif
// #ifdef MP-WEIXIN
Object.defineProperty(Object.prototype, 'API', {
  value: {
    commonApi,
    tools,
    userApi
  },
  configurable: false,
  enumerable: false
})
// #endif

这样就可以在小程序开发也享受pont带来的便利了。

-------------------------- [2024-05-31] 新增 -------------------------

按照上面的处理后,还是有一个问题,就是每次生成的时候,接口代码会被重置。导致运行时报错:

TypeError: Cannot set property 'API' of undefined

看来要拿源码来开刀了

找到项目node_modules\pont-engine\lib\compatible\generators\generate.js

找到getIndex()

这个是生成services/index.ts的,修改下,把uni-app的条件编译加上

    /** 获取接口类和基类的总的 index 入口文件代码 */
    getIndex() {
        let conclusion = `
      import * as defs from './baseClass';
      import './mods/';

      // #ifdef H5
      ${this.surrounding === pontConfig_1.Surrounding.typeScript ? '(window as any)' : 'window'}.defs = defs;
      // #endif
	  // #ifdef MP-WEIXIN
      Object.defineProperty(wx, 'defs', {
        value: defs,
        configurable:false,
        enumerable: false
      });
      // #endif
    `;
        // dataSource name means multiple dataSource
        if (this.dataSource.name) {
            conclusion = `
        import { ${this.dataSource.name} as defs } from './baseClass';
        export { ${this.dataSource.name} } from './mods/';
        export { defs };
      `;
        }
        return conclusion;
    }

再找到getModsIndex,这个是生成services/mods/index.ts的

把uni-app的条件编译加上

    /** 获取所有模块的 index 入口文件 */
    getModsIndex() {
        let conclusion = `
      // #ifdef H5
      ${this.surrounding === pontConfig_1.Surrounding.typeScript ? '(window as any)' : 'window'}.API = {
        ${this.dataSource.mods.map((mod) => (0, utils_1.reviseModName)(mod.name)).join(', \n')}
      };
	  // #endif
	  // #ifdef MP-WEIXIN
      Object.defineProperty(Object.prototype, 'API', {
        value: {
          ${this.dataSource.mods.map((mod) => (0, utils_1.reviseModName)(mod.name)).join(', \n')}
		},
        configurable: false,
        enumerable: false
      });
      // #endif
    `;
        // dataSource name means multiple dataSource
        if (this.dataSource.name) {
            conclusion = `
        export const ${this.dataSource.name} = {
          ${this.dataSource.mods.map((mod) => (0, utils_1.reviseModName)(mod.name)).join(', \n')}
        };
      `;
        }
        return `
      ${this.dataSource.mods
            .map((mod) => {
            const modName = (0, utils_1.reviseModName)(mod.name);
            return `import * as ${modName} from './${modName}';`;
        })
            .join('\n')}

      ${conclusion}
    `;
    }

修改完后,记得重启一下VSCode,把services目录删除掉重新生成

按照同样的思路,也可以添加对uniapp的APP-PLUS的支持。这里就不放代码了,有兴趣实验的同学可以试试

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/663769.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

618适合入手哪些数码好物?实用数码好物清单分享,错过拍烂大腿!

在一年一度的618购物狂欢节里,许多数码爱好者们都在这次盛大的购物盛宴中觅得心仪的数码好物,数码产品不仅改变了我们的生活方式,更让我们享受到了前所未有的便捷和乐趣,那么在这个618,哪些数码好物值得我们入手呢&…

Vulnhub项目:doubletrouble

1、靶机地址 靶机地址:doubletrouble: 1 ~ VulnHubdoubletrouble: 1, made by tasiyanci. Download & walkthrough links are available.https://vulnhub.com/entry/doubletrouble-1,743/ 靶机介绍:看这个名字,就觉得内有玄机&#xff…

git随记

git status 查看文件状态 git status -s 比较简洁的查看文件状态。如下代表此文件是新建的,没有被git跟踪的文件: $ git status -s ?? abc.txtgit add abc.txt 将abc添加到暂存区。后再次git status -s $ git status -s A abc.txtgit reset 将暂存…

Java中的枚举(Enum)

基本概念 Java 枚举是一个特殊的类,一般表示一组常量,比如一年的 4 个季节,一个年的 12 个月份,一个星期的 7 天,方向有东南西北等。 Java 枚举类使用 enum 关键字来定义,各个常量使用逗号(,&…

android gradle8.3 发布插件踩过的坑

之前写过gradle6.x和gradle7.x的插件,会有一些改动,到8.x我发现又有一些变化,记录一下,防止后边再遇到相同的情况 下边是插件的gradle文件配置 plugins {id("java-gradle-plugin") //会自动引入java-library、gradleAp…

【Linux】 管道扩展 — 开始使用命名管道

送给大家一句话: 人生有六个字,前面三个是不害怕,后面三个是不后悔。 -- 董卿 🔆🔆🔆🔆🔆🔆🔆🔆 命名管道的功能实现 1 命名管道的原理2 代码实…

ROS2从入门到精通2-1:launch多节点启动与脚本配置

目录 0 专栏介绍1 ROS2的启动脚本优化2 ROS2多节点启动案例2.1 C架构2.2 Python架构 3 其他格式的启动文件3.1 .yaml启动3.2 .xml启动 0 专栏介绍 本专栏旨在通过对ROS2的系统学习,掌握ROS2底层基本分布式原理,并具有机器人建模和应用ROS2进行实际项目的…

博客星球大冒险:用Spring Boot和JWT打造你的数字王国

揭秘如何在Spring Boot中无缝集成JWT,为你的应用打造一个高度可扩展且安全的认证系统。从添加依赖到创建JWT过滤器,再到实现令牌的有效性管理和刷新机制,每一步都精心设计,确保你的乐园能够迎接成千上万的游客! 文章目…

AltiumDesigner/AD添加数据库连接

1.首先确保本机电脑有无对应的数据库驱动,例如我这边要添加MySQL的数据,则需要首先下载MySQL数据驱动:MySQL :: Download MySQL Connector/ODBC (Archived Versions) 2.运行“odbcad32.exe”,如下图添加对应的数据库配置&#xf…

基于深度学习的模糊认知图方法

1 文章信息 文章题目为“Deep Fuzzy Cognitive Maps for Interpretable Multivariate Time Series Prediction”,该文于2019年发表于“IEEE TRANSACTIONS ON FUZZY SYSTEMS”。文章提出了深度模糊认知图(FCM)用于多变量时间序列预测&#xff…

一个良好的嵌入式系统框架(基于FreeRTOS)

目录 Unix操作系统里的优先级嵌入式系统里的优先级 Unix操作系统里的优先级 在《Unix传奇》中有这样一句话,用户态的进程/线程是三等公民、root线程是二等公民、硬件中断是一等公民。 在操作系统中,"用户态"和"内核态"是两种不同的…

BERT模型学习(1)

BERT(Bidirectional Encoder Representations from Transformers)由谷歌在2018年推出,迅速成为自然语言处理(NLP)领域的一个突破性成果。 基本概念 在深入了解BERT之前,需要先简单了解一下自然语言处理&a…

五分钟“手撕”链表

为了提高大家的学习效率,我把代码放开头,供查阅。 目录 一、链表的实现代码 二、什么是链表 三、链表的分类 四、链表的常见操作 插入 删除 五、Java自带的LinkedList 两个构造方法 一些常用方法 六、LinkedList的遍历 七、ArrayList和Linke…

达梦数据库写文件的方式探索

0x01 前沿 这篇文章整体算是《达梦数据库手工注入笔记》的续集,达梦作为国内优秀的信创数据库,在关基单位中拥有越来越大的用户使用量。 通过SQL注入来写文件一直以来都是SQL注入漏洞深入利用的一种方式,对于不同的数据库通常写文件的方式也是…

探索无限可能性——微软 Visio 2021 改变您的思维方式

在当今信息化时代,信息流动和数据处理已经成为各行各业的关键。微软 Visio 2021 作为领先的流程图和图表软件,帮助用户以直观、动态的方式呈现信息和数据,从而提高工作效率,优化业务流程。本文将介绍 Visio 2021 的特色功能及其在…

【管理咨询宝藏119】翰威特组织架构设计优化方案

本报告首发于公号“管理咨询宝藏”,如需阅读完整版报告内容,请查阅公号“管理咨询宝藏”。 【管理咨询宝藏119】翰威特组织架构设计优化方案 【格式】PDF版本 【关键词】人力资源、组织设计、组织架构 【核心观点】 - 城镇化建设和居民可支配收入的增长…

Python实现定时任务的方式

大家好,在当今数字化的时代,定时任务的需求在各种应用场景中频繁出现。无论是数据的定时更新、周期性的任务执行,还是特定时间点的操作触发,Python 都为我们提供了强大而灵活的手段来实现这些定时任务。当我们深入探索 Python 的世…

代理 模式

一、什么是代理模式 代理模式指代理控制对其他对象的访问,也就是代理对象控制对原对象的引⽤。在某些情况下,⼀个对象不适合或者不能直接被引⽤访问,⽽代理对象可以在客⼾端和⽬标对象之间起到中介的作⽤。 二、为什么使用代理模式 模式作…

MySQL各种锁

目录 1. 从粒度上区分锁 1.1 全局锁(第一粒度) 1.2 表级锁(第二粒度) 1.3 行锁(第三最小粒度) 2 从模式上区分锁 2.1 什么是乐观锁 2.2 什么是悲观锁 2.3 意向共享锁和意向排他锁 2.4 临键锁和记录…

【Python】 深入理解Python中的UnicodeDecodeError及其解决方案

基本原理 在Python编程中,我们经常需要处理各种类型的数据,尤其是文本数据。文本数据在计算机中通常以字节的形式存在,而字节需要被解码成我们能够理解的字符。这个过程涉及到编码和解码的概念。 编码是将字符转换为字节的过程,…