携程跨端解决方案的新选择:Taro-CRN

【跨端动态化技术知多少】 文章摘要:本文对业界跨端动态化技术做了一些归拢,方便志同道合的朋友一起学习交流、开拓视野。 阅读详情

作者简介

李羽,携程高级前端研发工程师,专注前端跨平台框架领域的开发与研究。

Hyme,携程前端研发经理,专注前端小程序/H5领域的开发与研究。

Chao,携程前端研发经理,关注前端跨平台领域与前端研发效率提升。

一、项目背景

随着小程序用户的增长,APP和小程序在需求迭代上呈齐头并进的趋势。与此同时,前端研发人员面对多套平台代码的维护与开发,研发投入上耗时耗力。目前携程内部急需一种跨平台的开发框架,来节约不必要的多套开发量。

 二、框架介绍

Taro-CRN是帮助携程开发者基于Taro开发CRN项目的框架,实现一套代码在小程序和APP上的跨端开发,也为后续携程的跨端开发生态打下基础。Taro-CRN由携程机票团队与火车票团队共建而成。Taro本身是业内比较成熟的跨平台解决方案,目前已经支持转换到多平台小程序、H5、RN页面,并且有很好的社区支持。

在携程内部,Taro也拥有同样广泛的使用基础。多个业务线应用Taro来实现多平台小程序的开发,也有大量的H5业务页面是由Taro-H5转换而成。然而,Taro-RN作为Taro跨端开发方案的最后一块拼图,在携程内部却很少有团队应用,其根本原因在于其难以与携程的CRN框架结合使用。CRN是适用于携程APP业务开发的React Native框架,在携程系APP上有极为广泛的应用。CRN会在构建过程中,进行一些针对携程业务的分包、混淆、引入公共包等优化策略。这一点与Taro-RN那种直接打出bundle包的方案难以融合。

由此我们确定了Taro-CRN框架的设计方向:

1)低成本接入,实现用Taro开发CRN页面。

2)贴近Taro官方方案,享受Taro强大社区支持。

3)接入CRN的构建与打包,适用携程业务开发。

4)低学习成本,提升开发者体验。

三、架构介绍

Taro-CRN框架主要由3部分组成:平台插件、Metro Config插件、基础组件及API库。

716664f8fb98dbf917e120edba47f3cf.png

Taro-CRN的平台插件提供了根据Taro来构建CRN工程的能力,这个构建出的CRN工程可以直接用来进行携程内部的MCD发布。同时平台插件也在CRN工程中引入了metro config的插件,通过对metro的配置做到引用的转向和transformer的支持,同时也在这里配置了Taro-CRN组件库的映射。在CRN的集中构建过程中,已经抹平差异的组件库与API库就被引入并做了替换。这样就做到了在Taro的业务工程上开发,低成本地打成CRN的bundle包并执行发布。

3.1 Taro-CRN 平台插件

Taro为了让开发者拓展更多定制化功能,引入了插件化机制。Taro-CRN的平台插件基于此,会按Taro工程的文件结构,基于内置的CRN模板文件,生成CRN工程所需的页面入口及目录结构,紧接着原本的Taro业务代码会被插件按目录塞到这个CRN的壳工程中。

同时平台插件也通过`ctx.registerPlatform`,将CRN与其他平台并作一起,可以像小程序或H5一样按Taro官方的命令进行开发与构建,提升了Taro开发者的开发体验。

3.2 Metro Config 插件

那么怎样将这样一个壳子是CRN结构、内嵌Taro业务代码的项目,打成CRN的最终产物呢?我们选择在metro构建过程中来处理。CRN框架本身为业务方的metro配置提供了扩展的途径,我们由此通过metro-config-plugin插入对Taro-CRN项目的额外构建配置。

88a45cf3129d5454ab83929ecd7b2043.png

平台插件在生成壳工程的同时,就会向项目里植入metro-config-plugin。在metro的解析阶段,插件会根据“引用链”分析Taro的组件及API的引用,并转向引用对应的Taro-CRN的组件及API库。得益于Taro支持完整的React开发体验,引用转向后就可以看做一个完整的CRN项目了。与此同时,Taro的框架代码与依赖就这样被隔离到打包的CRN项目之外,规避了其他跨端方案普遍存在的包size增大的弊端,这保证了Taro-CRN框架生成项目的性能与直接用RN开发的项目无差异。

除此之外,metro-config-plugin也做了很多方便业务开发的配置。比如Taro开发者熟悉的文件平台后缀,我们在这一层也实现了根据.crn.xxx的后缀来支持不同端上的业务差异代码。还有一些携程内部平台的差异支持,Metro Config插件中也保留了扩展能力。

对于RN与Taro在样式等写法风格的转换,我们选择在transformer的部分直接继承Taro-RN样式相关的transformer,配合我们开发的'code-transformer'一起实现babel转换与样式转译。这种方案最大的好处就是在开发调试阶段,开发者可以直接调试原始Taro代码,而非转后的CRN代码,极大提升开发效率。

3.3 Taro-CRN组件及API库

对于基础组件和API,我们严格按照Taro官方文档一一对应提供,这样极大降低开发门槛,Taro开发者甚至不需要学习RN即可使用。对于现有的Taro项目也可以不用做组件上的改动而直接转成CRN项目,拓展了框架的使用场景。

大多组件是直接沿用Taro-RN的实现,部分CRN有过优化的组件及API,我们用CRN对应Taro的参数进行了实现。对于部分RN中存在,但在Taro中不存在的组件,我们也开发提供相应的组件为使用者提供便利。

携程体系下的多平台小程序,做了非常多基于业务上的Taro优化,并提供了相应的API。为了方便携程主板的开发者,Taro-CRN也对部分API做了抹平,进一步降低了使用门槛。

3.4 其他支持

`@ctrip/plugin-publish-crn`是Taro-CRN提供的发布插件。CRN的发布是需要指定CRN的代码仓库,因此平台插件产出的CRN壳工程需要有独立的仓库或分支来存放。引入发布插件后,可以简单配置指定所需发布仓库或者是开发仓库下的发布分支,无需手动转移,提升发布效率。

四、接入使用
  
4.1 Taro项目中接入Taro-CRN

无论是接入新建Taro项目还是现有项目,都可以低成本转成CRN的项目来进行开发与调试。

a. 引入Taro-CRN平台插件

在Taro项目中引入前面提到的平台插件,`@ctrip/plugin-platform-crn`。另外如果也需要发布插件的话也可以接入`@ctrip/plugin-publish-crn`。

db875e9447d506980632600a61e5ccf7.jpeg

在Taro的目录结构中,config是Taro官方提供扩展配置的目录,在plugins中配置相关的插件依赖。

a99c090177285446957cfa371e678645.jpeg

b. 配置CRN平台参数

在config目录下,除了插件依赖配置项之外,还有各平台的相关参数配置。CRN作为待转的平台之一,可以像其他平台一样,支持在这里扩展配置。

crn: {
    projectName: 'YourProjectName', // 项目名
    partner: 'ct', // 内部多平台配置项
    publish: {
        target: 'git@Host:Group/Project.git',
        branch: 'specBranch',
        localDir: 'specDir'
    }, // 发布插件相关配置
    dependencies: {
      "react-native-svg": "~12.1.1",
      "babel-plugin-inline-import": "^3.0.0"
    }, // 项目所需额外依赖
    enableSvgTransform: true // 项目是否需要支持SVG
    // 更多其他扩展配置
  }


c. 调试与构建

接下来,开发者就可以按照Taro的开发习惯,直接用`taro build --type crn`来构建,或者通过watch来进行开发调试。

c6c3e85e1e0ed3adf3bf2aa422a2e4b9.jpeg

这样用户在模拟器中,打开红框对应的地址就可以开启调试了

d. 携程主板分包小程序的接入

携程当前的小程序生态为各业务线提供了针对Taro项目的扩展配置,这部分的接入也在Taro-CRN提供了额外的支持,只需要换成引入`@ctrip/plugin-platform-crn-tarox`版本的平台插件,并增加对应的分包配置,即可按前面的流程进入开发。

4.2 CRN项目中接入Taro-CRN业务组件

在业务开发过程中,有很多场景并不需要完整页面全部支持跨端,组件上的跨端支持则更为灵活。比如对于一些业务模块卡片,Taro-CRN支持Taro开发组件并输出,提供给CRN项目或者Taro项目直接引入,做到组件级的跨端开发。这样在被接入的CRN项目中只需要引入对应Taro-CRN的依赖,然后接入额外的metro配置即可。

const TaroCRNMetroConfig = require("@ctrip/metro-taro-crn");
const configBu = {
    resolver: TaroCRNMetroConfig.resolver,
    transformer: TaroCRNMetroConfig.transformer,
};


module.exports = configBu;


五、框架总结

对于跨端开发,业内其实有提供很多方案,开发者只有了解各自方案的使用场景,才能做出适合项目的选型。Taro-CRN的适合的场景:

1)适用于已有CRN支持的APP接入Taro方案;
2)适用于需要提供业务模块同时支持APP与小程序的场景;
3)适用于缺少RN开发经验的团队实践跨端开发。

当然,Taro-CRN框架仍是需要持续地打磨与优化。尤其为应对更加复杂的业务场景,在基础组件之上可以开发更多适配多平台的业务组件,来进一步的提升开发效率。这也是后续我们与携程内部多方合作优化的方向之一,以便于更好的促进Taro技术生态在携程的落地,给与开发者更多选择的空间。欢迎感兴趣的Taro或RN的开发者交流意见。

【推荐阅读】

4278aede93feb44f96ac1f1d5b89030b.jpeg

 “携程技术”公众号

  分享,交流,成长

携程优化版React Native框架:CRN深入解析 React Native 是一个由 Facebook 推出的开源移动应用框架,它允许开发者使用 JavaScript 和 React 来编写原生的移动应用。通过 React Native,开发者可以在 iOS 和 Android 平台上共享大部分应用代码,从而降低开发成本和提升开发效率。持续集成(CI)是一种软件开发实践,团队成员频繁地(通常是一天多次)将代码变更合并到主分支上。每次合并都会触发自动化构建和测试,从而尽早发现和定位集成错误。 阅读详情

相关推荐

react-CRN是CtripReactNative简称由携程无线平台研发团队基于ReactNative框架优化

CRN是Ctrip React Native简称,由携程无线平台研发团队基于React Native框架优化,定制成稳定性和性能更佳、也更适合业务场景的跨平台开发框架。

探索高效跨平台开发:携程CRN框架开源解析

CRN,全称Ctrip React Native,是由携程无线平台研发团队匠心打造的一个优化版的React Native框架。这个框架不仅提升了稳定性和性能,还更加贴近业务需求,为开发者带来了高效的跨平台开发体验。CRN开源了其性能优化部分,特别是针对大规模业务开发所必需的关键改进。 ## 项目技术分析 CRN的核心亮点在于其独特的功能列表: 1. **框架和业务代码拆分**:允许更灵活的打...

gitblog_00091的博客 782

Android11,无障碍服务模拟多手势使用dispatchGesture时总是onCancelled

AccessibilityService的dispatchGesture去模拟多手势,总是onCancelled的一种解决办法

m0_49953943的博客 2102

React-封装星星评价(支持半星、点击)拿来即用

Ⅰ- 壹 - 功能展示和使用需求 一 需要安装styled-components yarn add styled-components 二 用到的图标 Ⅱ - 贰 - 封装代码 一 创建文件Star.jsx import React, { Component } from 'react' import styled from "styled-components"; import star0 from '@a/images/iconku/star0.png' import star1 from

三季雨 912

Cadence AMS数模混合仿真:从零搭建高效验证环境的实战指南

本文是Cadence AMS数模混合仿真的实战指南,详细介绍了如何从零搭建高效的芯片验证环境。内容涵盖环境准备、Testbench创建、核心Config视图与ADE设置、仿真运行调试及性能加速技巧,旨在帮助工程师解决SoC设计中数字与模拟模块的集成验证难题,确保芯片设计一次成功。

weixin_29164091的博客 320

04目标检测-Two-stage的目标检测算法

前面我们对进行了对比分析,同时上一篇我们介绍了传统算法在目标检测的原理和效果,此篇我们记录了我学习目标检测算法的深度,深入讲述一下深度学习算法在目标检测的原理和效果。原文链接:https://blog.csdn.net/qq_41946216/article/details/132800752。版权声明:本文为优快云博主「爱吃面的猫」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。One-stage(YOLO和SSD系列):直接回归目标位置。

qq_41946216的博客 3650

Taro多端开发:2025年AI原生时代的“一次编写,处处智能“终极指南

本文深度解析Taro框架在2025年的最新演进,系统阐述从编译时架构到AI增强运行时的技术原理,结合6大企业级应用场景和量化性能基准,提供从项目初始化、AI能力集成到生产环境监控的完整工程化方案。通过京东京喜等实际案例,揭示Taro在小程序、H5、React Native、鸿蒙等平台的性能优化策略,并探索大模型API、WASM模型加载、多模态交互等前沿技术融合路径,为企业构建智能化跨端应用提供可复现、可落地的全套方法论。 关键词:Taro多端开发、AI智能集成、性能优化、企业级架构、鸿蒙适配

领码SPARK - 以无代码之星火,燎原数字之未来! 2633

海康工业相机SDK开发实战:从环境搭建到实时图像采集(附避坑指南)

本文详细介绍了海康工业相机SDK在Windows平台上的开发实战流程,涵盖从环境搭建、运行时库路径配置到实时图像采集的全过程。重点解析了MVS SDK部署、设备连接、参数设置及图像处理等核心环节,并提供了实用的避坑指南和错误排查方法,帮助开发者构建稳定的机器视觉系统。

weixin_29248611的博客 844

Taro v3.6 代号为「Reach」,已发布 canary 版本

大家好,我是若川。我持续组织了近一年的源码共读活动,感兴趣的可以点此扫码加我微信 lxchuan12参与,每周大家一起学习200行左右的源码,共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》包含20余篇源码文章。历史面试系列。另外:目前建有江西|湖南|湖北籍前端群,可加我微信进群。近期我们确定了 v3.6 版本的代号「Reach」,并发布了 v3.6-canary 版本,多个新特性在...

u012384510的博客 935

MIKE21 MIKE软件 教程 0.1 软件介绍与教学目录

MIKE 21是一个专业的工程软件包,用于模拟河流、湖泊、河口、海湾、海岸及海洋的水流、波浪、泥沙及环境问题。在MIKE Zero集成平台中,主要有MIKE11,MIKE21,MIKE3三类软件,分别对应一维,二维,三维的水动力模型模拟。同时还包括MIKE HYDRO,MIKE FLOOD等其他功能,各软件的具体介绍请参考DHI公司的官方文档,在此不作赘述。学习过程中,对于任何操作界面的疑问,建议大家仔细阅读帮助文档(在有疑问的界面按F1调出),同时官方也提供了对应的线上和线下教学服务(免费+收费)。

Hello Word 2万+

第9章:Embedding、Pooling 与检索增强基础

本文介绍了律师事务所如何利用vLLM构建法律文档RAG系统,解决传统关键词检索在语义匹配上的不足。主要内容包括: 项目背景:传统Elasticsearch检索在法律术语上的低准确率问题,及多模型维护的复杂性; 技术方案:采用vLLM统一支持生成和向量化能力,通过语义向量检索提升相关性; 关键实现: 用vLLM的Embedding端点处理文档向量化 构建包含离线索引和在线检索的完整RAG流程 采用余弦相似度进行语义匹配 实践建议:切片大小选择、向量归一化处理、不同场景下的数据库选型等。

davidwang456的专栏 58

《携程技术2023年度合辑》,送给爱学习的你

序言“疾风知劲草,烈火见真金。”2023年,是我们的挑战之年,也是我们的成长之年。全球旅游行业在经历了三年疫情的严重打击后,终于迎来了全面的复苏和爆发式的增长。我们多个业务线订单量均突破了历史最高值,随着五一、暑期、十一、春运多个业务高峰接踵而至,我们系统承受了前所未有之压力,面对压力,我们没有退缩,而是选择了挑战。我们进行了一系列的技术改进和创新,提升了系统的效率、可扩展性、稳定性和安全性,同时...

携程技术 1052

【图像去噪】论文复现:灵感源自MAE!进一步解决BSN的局限性,破坏真实噪声的空间相关性!AMSNet的Pytorch源码复现,跑通源码,原理详解!

论文题目:Asymmetric Mask Scheme for Self-Supervised Real Image Denoising —— 自监督真实图像去噪的非对称掩码方案【图像去噪】论文精读:Asymmetric Mask Scheme for Self-Supervised Real Image Denoising(AMSNet)AMSNet是基于PyTorch Lightning CLI深度学习框架编写的,比较适合复杂的大型任务,复用很方便,但是安装和环境配置问题太多。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 544

react星星评分

React制作星星评分React星星评分1、构造一个新的react2、设定state参数3、设定渲染格式4、星星元素5、补全react事件处理6、最终代码7、最终效果 React星星评分 大家好,本文介绍使用react制作星星评分,有关react的相关知识这里就不作介绍了。下面就让我们从头开始构建评分系统吧! 1、构造一个新的react export default class StarMarki...

weixin_39075290的博客 2042

C++笔记之emplace_back(),push_back()性能比较i++ 、 ++i

操作是否需要临时对象/拷贝性能需要(构造临时对象)较慢不需要(直接构造)较快i++需要(保存旧值)对于内置类型无影响,但对于自定义类型(如迭代器、大对象)会有拷贝开销++i不需要相对更快(尤其是自定义类型)都存在"是否需要额外的临时对象/拷贝"这一性能差异点和++i都是更高效的版本(避免临时对象/拷贝)和i++都可能产生额外的临时对象(前者构造临时对象,后者保存旧值)对于内置类型(如int),i++和++i性能几乎没有差异(编译器会优化);但对于自定义类型(尤其是迭代器等重量级对象),

小勇博客 94

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

干货 | RN框架在携程旅行鸿蒙应用的全业务适配实践

作者简介携程鸿蒙框架技术团队,负责携程旅行鸿蒙系统原生应用开发,为鸿蒙生态用户提供一站式旅行服务。团队热招岗位:资深移动端工程师、高级iOS开发工程师携程作为鸿蒙生态在旅游行业的重要合作伙伴,早在鸿蒙服务卡片时期就和华为开始合作。2023年9月,华为宣布鸿蒙原生应用启动开发,同年12月,我们完成携程旅行鸿蒙Beta版本的开发,技术上基于Web+部分原生的方案实现。24年6月HarmonyOS Ne...

携程技术 3043

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

CRN框架全面解析:携程如何基于React Native打造高性能跨平台解决方案

CRN(Ctrip React Native)是携程无线平台研发团队基于React Native框架优化定制的跨平台开发框架,通过深度性能调优和业务适配,解决了原生React Native在大型应用中的稳定性与性能瓶颈,成为企业级跨平台开发的理想选择。 ## 🚀 为什么选择CRN?核心优势解析 ### 1. 首屏加载速度提升60%+ CRN针对React Native的启动流程进行了深度优化

gitblog_00199的博客 634

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

react通过组件实现星星评价(小白可看)

封装组件并传值 可用propstype 先定义一个组件使用export default 来抛出组件 在主页面使用import 变量 from ‘地址’来引入 直接在主页面调用定义名称,比如首字母按组件要求大写,可以小写,但不推荐 然后在中直接加入传递的数据 封装的Discuss组件 使用this.props来获取组件传递过来的数据( 可以添加到this.state中) 6.数据以及获取到了可...

weixin_45381828的博客 1540

Taro 正式发布 3.6 版本:支持跨端路由、请求库,新增鸿蒙、Web 端平台插件,小程序持续集成 CI 能力升级...

大家好,我是若川。我持续组织了近一年的源码共读活动,感兴趣的可以点此扫码加我微信lxchuan12参与,每周大家一起学习200行左右的源码,共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》包含20余篇源码文章。历史面试系列。另外:目前建有江西|湖南|湖北籍前端群,可加我微信进群。扫码加我微信 lxchuan12、拉你进源码共读群两个月前,我们发布了 Taro v3.6 的 cana...

u012384510的博客 2702

携程应用系统整体架构学习

下图是携程应用系统整体架构 根据上图可以发现以下几个问题 1. 同一节点在多个层次出现。 2. 只是简单的技术罗列,架构分层之间的关联不大。 3. 线上服务/应用层中HBase、Redis、Tomcat不是一方面的东西,混做一团。 4. 离线计算为什么又把SparkQL归类进去呢? 5. hive只能说是一个数据仓库工具,反而归类到数据源层 这样的架构水平,要么携程不想透露太多真实

warrah 南极狼 4389

php 星星评级,详解JavaScript实现星星等级评价功能

这篇文章主要为大家详细介绍了JavaScript实现星星等级评价功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下本文实例为大家分享了js星星等级评价的具体代码,供大家参考,具体内容如下效果图:Document.container{float:left;}.score{float: left;position: relative;width: 100px;margin-top: 5px;mar...

weixin_39752215的博客 472

react-native实现评价星星

react-native 实现评价星星

qq_37399372的博客 2570

CRN:实时高效的三维感知解决方案

CRN:实时高效的三维感知解决方案 项目介绍 CRN(Camera Radar Net)是一个创新的摄像头与雷达融合框架,它能够生成语义丰富且空间精确的鸟瞰图(Bird's-eye-view,简称BEV)特征图,适用于各种不同的任务。通过结合摄像头与雷达的优势,CRN能够克服单一摄像头视角中空间信息不足的问题,为自动驾驶、机器人导航等领域提供强大的三维感知能力。 项目技术分析 CRN的核心技术是利...

gitblog_00024的博客 545

携程CRN源码详解之拆包(一)——总览

1、CRN开源 CRN是由携程无线平台研发团队基于React Native框架优化,定制成稳定性和性能更佳、也更适合业务场景的的跨平台开发框架。CRN是一整套框架,包含了拆包、加载流程框架、UI框架、平台统一框架,CRN的初衷是提升RN页面加载速度,在不断地优化后形成了CRN框架。因此性能是CRN的核心,而需要做到性能优化,就离不开CRN的根本——拆包。 本次CRN开源的主要是...

tyro_smallnew的专栏 2444

携程 React Native 实践与性能优化

本文为携程技术中心投稿,版权归原作者所有,非经允许,请勿转载。 作者简介: 赵辛贵,携程无线开发高级技术经理,目前主要负责 React Native 框架在携程内部的使用推广和性能优化。 欢迎技术投稿、约稿、给文章纠错,请发送邮件至:mobile@csdn.net。 React Native(下文简称 RN)开源已经一年多时间,国内各大互联网公司都在使用,携程也在今年 5 月份投...

历史上的今天 3126

干货 | 携程Taro多端化探索与实践

作者简介Frank,携程前端研发,专注前端性能优化、一码多端、工程化建设等领域。一、业务背景随着移动互联网和智能设备的普及,前端开发人员需要采用多端同构技术来适配不同的终端(小程序、App和Web)。这些终端之间存在着明显的差异,包括浏览器引擎、操作系统、交互方式以及代码语言等方面。这些差异给前端开发人员带来了不少挑战。一方面,不同终端采用不同的浏览器引擎和操作系统,导致页面渲染和交互行为的表现各...

携程技术 3339
上一篇: 干货 | 携程MySQL迁移OceanBase最佳实践
下一篇: 干货 | 新时代的 SSR 框架破局者:qwik
携程技术
博客等级 码龄10年 3715粉丝 324原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值