CN110362792B - 将rn文件转换为小程序文件的方法、装置及转换设备 - Google Patents

将rn文件转换为小程序文件的方法、装置及转换设备 Download PDF

Info

Publication number
CN110362792B
CN110362792B CN201910605209.3A CN201910605209A CN110362792B CN 110362792 B CN110362792 B CN 110362792B CN 201910605209 A CN201910605209 A CN 201910605209A CN 110362792 B CN110362792 B CN 110362792B
Authority
CN
China
Prior art keywords
file
code
applet
layout
style
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201910605209.3A
Other languages
English (en)
Other versions
CN110362792A (zh
Inventor
彭飞
朴慧姝
刘帅
吕庆春
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Wuba Co Ltd
Original Assignee
Wuba Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Wuba Co Ltd filed Critical Wuba Co Ltd
Priority to CN201910605209.3A priority Critical patent/CN110362792B/zh
Publication of CN110362792A publication Critical patent/CN110362792A/zh
Application granted granted Critical
Publication of CN110362792B publication Critical patent/CN110362792B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/12Use of codes for handling textual entities
    • G06F40/151Transformation
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Health & Medical Sciences (AREA)
  • Artificial Intelligence (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Computational Linguistics (AREA)
  • General Health & Medical Sciences (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Document Processing Apparatus (AREA)
  • Stored Programmes (AREA)

Abstract

本发明公开一种将RN文件转换为小程序文件的方法、装置及转换设备,该方法包括:获取RN文件的文件依赖图,文件依赖图中一个节点对应RN文件中一个代码文件;针对文件依赖图中每个节点,确定该节点对应的代码文件的类型,如果代码文件的类型为预设入口文件类型,则根据代码文件生成小程序文件的入口文件;如果代码文件的类型为预设组件文件类型,则根据代码文件生成小程序文件的组件文件;如果代码文件的类型为预设页面文件类型,则根据代码文件生成小程序文件的页面文件。本发明实施例中,无需重复在小程序环境开发对应的小程序文件,降低了开发成本,提升了开发效率;此外,RN文件和小程序文件可以共用一套源代码,提高了代码复用率。

Description

将RN文件转换为小程序文件的方法、装置及转换设备
技术领域
本发明涉及信息处理技术领域,特别是涉及一种将RN文件转换为小程序文件的方法、装置及转换设备。
背景技术
在移动开发领域,自从Facebook推出React Native(简称RN)跨平台移动应用开发框架后,基于JavaScript的跨平台开发逐渐成为移动开发领域中的热门领域。RN推出不久,国内一些互联网公司基于本公司的平台,例如腾讯公司基于微信平台,推出了小程序开发框架,开发者可以在小程序开发框架下,开发能够在微信中运行的小程序。目前,虽然RN文件和小程序文件均是使用JavaScript语言开发的,但是由于语法规则彼此不同,因此开发者需要学习两套开发框架技术,开发两套代码,导致开发成本比较高。为了降低开发成本,迫切需要一种能够将RN文件转换为小程序文件的技术。
发明内容
本发明实施例提供一种将RN文件转换为小程序文件的方法、装置及转换设备,以解决现有技术中重复开发所造成的开发成本较高的技术问题。
根据本发明的第一方面,公开了一种将RN文件转换为小程序文件的方法,所述方法包括:
获取RN文件的文件依赖图,其中,所述RN文件中包括多个基于RN语法规则编写的代码文件,所述文件依赖图中记录有所述RN文件中各代码文件的依赖关系,所述文件依赖图中包括多个节点,一个节点对应所述RN文件中的一个代码文件,且该节点中记录有对应代码文件的依赖文件信息;
针对所述文件依赖图中的每个节点Pi,确定所述节点Pi对应的代码文件Qi的类型,如果所述代码文件Qi的类型为预设入口文件类型,则根据所述代码文件Qi生成小程序文件的入口文件;其中,所述小程序文件由符合小程序语法规则的入口文件、页面文件和组件文件构成,所述节点Pi为所述文件依赖图中的第i个节点,1≤i≤N,N为所述文件依赖图中节点的个数;
如果所述代码文件Qi的类型为预设组件文件类型,则根据所述代码文件Qi生成小程序文件的组件文件;
如果所述代码文件Qi的类型为预设页面文件类型,则根据所述代码文件Qi生成小程序文件的页面文件。
可选地,作为一个实施例,所述获取RN文件的文件依赖图,包括:
获取RN文件的入口文件;
获取所述RN文件的入口文件的抽象语法树AST;
遍历所述RN文件的入口文件的AST,查找其中的文件引用节点,从所述文件引用节点中提取所述RN文件的入口文件的依赖文件信息;
根据所述RN文件的入口文件的依赖文件信息,获取所述RN文件的入口文件的依赖文件;
对所述RN文件的入口文件的依赖文件重复与所述RN文件的入口文件相同的处理,直至处理的代码文件不存在依赖文件,得到对应的依赖文件信息;
根据所述RN文件的入口文件的依赖文件信息和处理得到的依赖文件信息,生成所述RN文件的文件依赖图。
可选地,作为一个实施例,所述确定所述节点Pi对应的代码文件Qi的类型,包括:
确定所述代码文件Qi中是否包含RN入口文件注册信息,如果包含RN入口文件注册信息,则确定所述代码文件Qi为预设入口文件类型;
确定预设组件信息列表中是否包含所述代码文件Qi的标识,如果包含代码文件Qi的标识,则确定所述代码文件Qi为预设组件文件类型;其中,所述预设组件信息列表是基于对依赖所述代码文件Qi的代码文件Mi进行处理得到的,所述预设组件信息列表中记录有所述代码文件Mi引用的组件文件的标识;
如果所述代码文件Qi的类型不为预设入口文件类型和预设组件文件类型,则确定所述代码文件Qi的类型为预设页面文件类型。
可选地,作为一个实施例,所述小程序文件的入口文件中包括:第一配置文件、第一样式文件、第一布局文件和第一逻辑文件;
所述根据所述代码文件Qi生成小程序文件的入口文件,包括:
获取所述代码文件Qi依赖的页面文件的文件路径,生成包含该文件路径的第一配置文件,其中,所述第一配置文件中pages对应的value为所述代码文件Qi依赖的页面文件的文件路径;
提取所述代码文件Qi中的样式代码,将提取到的样式代码转换为符合小程序语法规则的样式代码,生成包含所述符合小程序语法规则的样式代码的第一样式文件;
提取所述代码文件Qi中的布局代码,将提取到的布局代码转换为符合小程序语法规则的布局代码,生成包含所述符合小程序语法规则的布局代码的第一布局文件;
提取所述代码文件Qi中的逻辑代码,将提取到的逻辑代码转换为符合小程序语法规则的逻辑代码,生成包含所述符合小程序语法规则的逻辑代码的第一逻辑文件。
可选地,作为一个实施例,所述小程序文件的页面文件中包括:第二配置文件、第二样式文件、第二布局文件和第二逻辑文件;
所述根据所述代码文件Qi生成小程序文件的页面文件,包括:
获取所述代码文件Qi依赖的组件文件的文件路径,生成包含该文件路径的第二配置文件,其中,所述第二配置文件中usingComponents对应的value为所述代码文件Qi依赖的组件文件的文件路径;
提取所述代码文件Qi中的样式代码,将提取到的样式代码转换为符合小程序语法规则的样式代码,生成包含所述符合小程序语法规则的样式代码的第二样式文件;
提取所述代码文件Qi中的布局代码,将提取到的布局代码转换为符合小程序语法规则的布局代码,生成包含所述符合小程序语法规则的布局代码的第二布局文件;
提取所述代码文件Qi中的逻辑代码,将提取到的逻辑代码转换为符合小程序语法规则的逻辑代码,生成包含所述符合小程序语法规则的逻辑代码的第二逻辑文件。
可选地,作为一个实施例,所述小程序文件的组件文件中包括:第三配置文件、第三样式文件、第三布局文件和第三逻辑文件;
所述根据所述代码文件Qi生成小程序文件的组件文件,包括:
生成符合小程序语法规则的第三配置文件,其中,所述第三配置文件中component属性设置为true;
提取所述代码文件Qi中的样式代码,将提取到的样式代码转换为符合小程序语法规则的样式代码,生成包含所述符合小程序语法规则的样式代码的第三样式文件;
提取所述代码文件Qi中的布局代码,将提取到的布局代码转换为符合小程序语法规则的布局代码,生成包含所述符合小程序语法规则的布局代码的第三布局文件;
提取所述代码文件Qi中的逻辑代码,将提取到的逻辑代码转换为符合小程序语法规则的逻辑代码,生成包含所述符合小程序语法规则的逻辑代码的第三逻辑文件。
可选地,作为一个实施例,所述提取所述代码文件Qi中的样式代码,包括:
获取所述代码文件Qi的AST,并遍历;
确定所述代码文件Qi的AST中的样式节点,其中,所述样式节点为节点的callee对象的名称为StyleSheet的节点;
从所述样式节点中提取样式代码。
可选地,作为一个实施例,所述提取所述代码文件Qi中的布局代码,包括:
获取所述代码文件Qi的AST,并遍历;
确定所述代码文件Qi的AST中的布局节点,其中,所述布局节点为节点类型为JSXElement的节点;
从所述布局节点中提取布局代码。
可选地,作为一个实施例,所述提取所述代码文件Qi中的逻辑代码,包括:
获取所述代码文件Qi的AST,并遍历;
确定所述代码文件Qi的AST中的逻辑节点,其中,所述逻辑节点为所述代码文件Qi的AST中样式节点和布局节点之外的节点;
从所述逻辑节点中提取逻辑代码。
根据本发明的第二方面,公开了一种将RN文件转换为小程序文件的装置,所述装置包括:
获取模块,用于获取RN文件的文件依赖图,其中,所述RN文件中包括多个基于RN语法规则编写的代码文件,所述文件依赖图中记录有所述RN文件中各代码文件的依赖关系,所述文件依赖图中包括多个节点,一个节点对应所述RN文件中的一个代码文件,且该节点中记录有对应代码文件的依赖文件信息;
确定模块,用于针对所述文件依赖图中的每个节点Pi,确定所述节点Pi对应的代码文件Qi的类型,其中,所述节点Pi为所述文件依赖图中的第i个节点,1≤i≤N,N为所述文件依赖图中节点的个数;
第一生成模块,用于在所述确定模块确定所述代码文件Qi的类型为预设入口文件类型的情况下,根据所述代码文件Qi生成小程序文件的入口文件;其中,所述小程序文件由符合小程序语法规则的入口文件、页面文件和组件文件构成;
第二生成模块,用于在所述确定模块确定所述代码文件Qi的类型为预设组件文件类型的情况下,根据所述代码文件Qi生成小程序文件的组件文件;
第三生成模块,用于在所述确定模块确定所述代码文件Qi的类型为预设页面文件类型的情况下,根据所述代码文件Qi生成小程序文件的页面文件。
可选地,作为一个实施例,所述获取模块包括:
第一获取子模块,用于获取RN文件的入口文件;
第二获取子模块,用于获取所述RN文件的入口文件的AST;
第一提取子模块,用于遍历所述RN文件的入口文件的AST,查找其中的文件引用节点,从所述文件引用节点中提取所述RN文件的入口文件的依赖文件信息;
第三获取子模块,用于根据所述RN文件的入口文件的依赖文件信息,获取所述RN文件的入口文件的依赖文件;
处理子模块,用于对所述RN文件的入口文件的依赖文件重复与所述RN文件的入口文件相同的处理,直至处理的代码文件不存在依赖文件,得到对应的依赖文件信息;
第一生成子模块,用于根据所述RN文件的入口文件的依赖文件信息和处理得到的依赖文件信息,生成所述RN文件的文件依赖图。
可选地,作为一个实施例,所述确定模块包括:
第一确定子模块,用于确定所述代码文件Qi中是否包含RN入口文件注册信息,如果包含RN入口文件注册信息,则确定所述代码文件Qi为预设入口文件类型;
第二确定子模块,用于确定预设组件信息列表中是否包含所述代码文件Qi的标识,如果包含代码文件Qi的标识,则确定所述代码文件Qi为预设组件文件类型;其中,所述预设组件信息列表是基于对依赖所述代码文件Qi的代码文件Mi进行处理得到的,所述预设组件信息列表中记录有所述代码文件Mi引用的组件文件的标识;
第三确定子模块,用于在所述代码文件Qi的类型不为预设入口文件类型和预设组件文件类型的情况下,确定所述代码文件Qi的类型为预设页面文件类型。
可选地,作为一个实施例,所述小程序文件的入口文件中包括:第一配置文件、第一样式文件、第一布局文件和第一逻辑文件;
所述第一生成模块包括:
第二生成子模块,用于获取所述代码文件Qi依赖的页面文件的文件路径,生成包含该文件路径的第一配置文件,其中,所述第一配置文件中pages对应的value为所述代码文件Qi依赖的页面文件的文件路径;
第三生成子模块,用于提取所述代码文件Qi中的样式代码,将提取到的样式代码转换为符合小程序语法规则的样式代码,生成包含所述符合小程序语法规则的样式代码的第一样式文件;
第四生成子模块,用于提取所述代码文件Qi中的布局代码,将提取到的布局代码转换为符合小程序语法规则的布局代码,生成包含所述符合小程序语法规则的布局代码的第一布局文件;
第五生成子模块,用于提取所述代码文件Qi中的逻辑代码,将提取到的逻辑代码转换为符合小程序语法规则的逻辑代码,生成包含所述符合小程序语法规则的逻辑代码的第一逻辑文件。
可选地,作为一个实施例,所述小程序文件的页面文件中包括:第二配置文件、第二样式文件、第二布局文件和第二逻辑文件;
所述第二生成模块包括:
第六生成子模块,用于获取所述代码文件Qi依赖的组件文件的文件路径,生成包含该文件路径的第二配置文件,其中,所述第二配置文件中usingComponents对应的value为所述代码文件Qi依赖的组件文件的文件路径;
第七生成子模块,用于提取所述代码文件Qi中的样式代码,将提取到的样式代码转换为符合小程序语法规则的样式代码,生成包含所述符合小程序语法规则的样式代码的第二样式文件;
第八生成子模块,用于提取所述代码文件Qi中的布局代码,将提取到的布局代码转换为符合小程序语法规则的布局代码,生成包含所述符合小程序语法规则的布局代码的第二布局文件;
第九生成子模块,用于提取所述代码文件Qi中的逻辑代码,将提取到的逻辑代码转换为符合小程序语法规则的逻辑代码,生成包含所述符合小程序语法规则的逻辑代码的第二逻辑文件。
可选地,作为一个实施例,所述小程序文件的组件文件中包括:第三配置文件、第三样式文件、第三布局文件和第三逻辑文件;
所述第三生成模块包括:
第十生成子模块,用于生成符合小程序语法规则的第三配置文件,其中,所述第三配置文件中component属性设置为true;
第十一生成子模块,用于提取所述代码文件Qi中的样式代码,将提取到的样式代码转换为符合小程序语法规则的样式代码,生成包含所述符合小程序语法规则的样式代码的第三样式文件;
第十二生成子模块,用于提取所述代码文件Qi中的布局代码,将提取到的布局代码转换为符合小程序语法规则的布局代码,生成包含所述符合小程序语法规则的布局代码的第三布局文件;
第十三生成子模块,用于提取所述代码文件Qi中的逻辑代码,将提取到的逻辑代码转换为符合小程序语法规则的逻辑代码,生成包含所述符合小程序语法规则的逻辑代码的第三逻辑文件。
可选地,作为一个实施例,所述第三生成子模块、第七生成子模块和第十一生成子模块中的至少一个包括:
第一获取单元,用于获取所述代码文件Qi的AST,并遍历;
第一确定单元,用于确定所述代码文件Qi的AST中的样式节点,其中,所述样式节点为节点的callee对象的名称为StyleSheet的节点;
第一提取单元,用于从所述样式节点中提取样式代码。
可选地,作为一个实施例,所述第四生成子模块、第八生成子模块和第十二生成子模块中的至少一个包括:
第二获取单元,用于获取所述代码文件Qi的AST,并遍历;
第二确定单元,用于确定所述代码文件Qi的AST中的布局节点,其中,所述布局节点为节点类型为JSXElement的节点;
第二提取单元,用于从所述布局节点中提取布局代码。
可选地,作为一个实施例,所述第五生成子模块、第九生成子模块和第十三生成子模块中的至少一个包括:
第三获取单元,用于获取所述代码文件Qi的AST,并遍历;
第三确定单元,用于确定所述代码文件Qi的AST中的逻辑节点,其中,所述逻辑节点为所述代码文件Qi的AST中样式节点和布局节点之外的节点;
第三提取单元,用于从所述逻辑节点中提取逻辑代码。
根据本发明的第三方面,公开了一种转换设备,所述转换设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现上述将RN文件转换为小程序文件的方法中的步骤。
根据本发明的第四方面,公开了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述将RN文件转换为小程序文件的方法中的步骤。
本发明实施例中,通过生成RN文件的文件依赖图,对文件依赖图中每个节点对应的代码文件进行类型判断,依据判断结果将RN文件的代码文件转换成能在小程序运行环境中运行的小程序文件的入口文件、组件文件和页面文件。与现有技术相比,本发明实施例无需重复在小程序环境开发对应的小程序文件,使得原本需要开发和维护两套代码及系统的成本变成只需开发和维护一套代码及系统,降低了开发成本,提升了开发效率;此外,RN文件和小程序文件可以共用一套源代码,提高了代码复用率。
附图说明
图1是本发明的一个实施例的将RN文件转换为小程序文件的方法的流程图;
图2是本发明的一个实施例的图1中步骤102的一种实施方式的流程图;
图3是本发明的一个实施例的图1中步骤103的一种实施方式的流程图;
图4是本发明的一个实施例的第一配置文件的示例图;
图5是本发明的一个实施例的图1中步骤104的一种实施方式的流程图;
图6是本发明的一个实施例的第二配置文件的示例图;
图7是本发明的一个实施例的图1中步骤105的一种实施方式的流程图;
图8是本发明的一个实施例的第三配置文件的示例图;
图9是本发明的一个实施例的将RN文件转换为小程序文件的装置的结构示意图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。
本发明实施例提供了一种将RN文件转换为小程序文件的方法、装置及转换设备。
为了便于理解,下面首先对本发明实施例中涉及到的一些概念进行介绍。
React Native(简称为“RN”)是一种由FaceBook推出的开源跨平台移动应用开发框架,RN使用JavaScript语言,通过iOS和Android平台提供的JS解析引擎,来调用iOS和Android平台的Native功能。
小程序是一种不需要下载安装即可使用的应用程序,用户扫一扫或者搜一下即可打开应用,不用关心是否安装太多应用的问题。
微信小程序是一种由腾讯公司推出的、基于微信APP的跨平台移动应用开发框架,微信小程序使用JavaScript语言,调用微信APP中具有的功能,从而来支持基于其上运行的移动应用的开发。
RN文件(又可以称为“RN工程”),是使用JavaScript语言,基于RN语法规则编写的文件。
小程序文件(又可以称为“小程序工程”),是使用JavaScript语言,基于小程序语法规则编写的文件。
AST(Abstract Syntax Tree,抽象语法树)是用树状表现形式来展现源代码的抽象语法结构,利用抽象语法树可以方便地实现多种源程序处理工具,例如智能编辑器和语言翻译器等。
Babel是一种JavaScript语言编译器,Babel提供的API接口可以用来操作JavaScript代码的抽象语法树,从而来实现代码转化。
接下来对本发明实施例提供的一种将RN文件转换为小程序文件的方法进行介绍。
图1是本发明的一个实施例的将RN文件转换为小程序文件的方法的流程图,该方法由转换设备执行,在实际应用中,该转换设备可以包括:服务器、电脑和桌面机等计算机设备,也可以包括:智能手机、平板电脑和个人数字助理等移动终端,如图1所示,该方法可以包括以下步骤:步骤101、步骤102、步骤103、步骤104和步骤105,其中,
在步骤101中,获取RN文件的文件依赖图,其中,RN文件中包括多个基于RN语法规则编写的代码文件,文件依赖图中记录有RN文件中各代码文件的依赖关系,文件依赖图中包括多个节点,一个节点对应RN文件中的一个代码文件,且该节点中记录有对应代码文件的依赖文件信息。
本发明实施例中,通过将RN文件中的代码转换为符合小程序语法规则的代码,来实现将RN文件转换为小程序文件。
考虑到RN文件中各代码文件之间的依赖关系,如果直接对RN文件中的代码文件进行转化,会出现重复转化的问题,为了避免出现重复转换的问题,本发明实施例中,引入RN文件的文件依赖图,基于RN文件的文件依赖图进行代码文件的转换。
本发明实施例中,代码文件之间的调用或引用关系称之为依赖关系。
本发明实施例中,可以通过多种方式构建RN文件的文件依赖图,具体的,可以从RN文件的入口文件开始逐步构建该RN文件的文件依赖图,此时,在本发明提供的一个实施方式中,上述步骤101可以包括以下步骤(图中未示出):步骤1011、步骤1012、步骤1013、步骤1014、步骤1015和步骤1016,其中,
在步骤1011中,获取RN文件的入口文件。
本发明实施例中,RN文件的入口文件可以理解为RN文件的入口执行文件,是RN文件的开始。
本发明实施例中,可以从预置的配置信息中获取RN文件的入口文件路径,根据RN文件的入口文件路径,获取RN文件的入口文件。在实际处理时,可以将RN文件的入口文件读入转换设备的内存中进行后续步骤处理。
在步骤1012中,获取RN文件的入口文件的AST。
本发明实施例中,在获取RN文件的入口文件后,可以通过调用Babel提供的API(例如transform)对该入口文件进行处理,生成RN文件的入口文件的AST。
在步骤1013中,遍历RN文件的入口文件的AST,查找其中的文件引用节点,从文件引用节点中提取RN文件的入口文件的依赖文件信息。
本发明实施例中,文件引用节点为AST中节点类型为ImportDeclaration的节点,文件引用节点中记录有代码文件的依赖文件信息。
本发明实施例中,入口文件的依赖文件信息可以包括:入口文件依赖的代码文件的文件名称、文件路径、文件代码和父文件路径等。
需要说明的是,RN文件中依赖的代码文件可分为三种类型:本地代码文件、React和React Native组件文件以及其他第三方库,其中,本地代码文件的文件路径一般位于入口文件所在目录或者子目录下面;React和React Native组件文件在上述提取操作可以直接忽略;其他第三方库主要是一些工具库,针对这些工具库,将文件目录结构拷贝到生成的小程序代码目录结构下即可,即也不需要做提取处理。也就是说,本步骤中的依赖文件信息提取只针对于本地代码文件,对于其他两种类型的文件不做上述提取处理。
在步骤1014中,根据RN文件的入口文件的依赖文件信息,获取RN文件的入口文件的依赖文件。
在一个例子中,RN文件的入口文件为file0,通过遍历file0的AST,提取file0依赖的代码文件(例如file1,file2,file3,…)的相关信息(例如文件路径),根据提取到的文件路径确定file0的依赖文件file1,file2,file3,…。
在步骤1015中,对RN文件的入口文件的依赖文件重复与RN文件的入口文件相同的处理,直至处理的代码文件不存在依赖文件,得到对应的依赖文件信息。
接上一步骤中的例子,在确定file0的依赖文件file1,file2,file3,…后,针对每个依赖文件file1,file2,file3,…均进行上述步骤1012至步骤1014的处理,得到各依赖文件的依赖文件信息。
在步骤1016中,根据RN文件的入口文件的依赖文件信息和处理得到的依赖文件信息,生成RN文件的文件依赖图。
本发明实施例中,上述步骤1013和步骤1015中提取到的各依赖文件信息分别存储于文件依赖图的节点中。
在步骤102中,针对文件依赖图中的每个节点Pi,确定节点Pi对应的代码文件Qi的类型,其中,节点Pi为文件依赖图中的第i个节点,1≤i≤N,N为文件依赖图中节点的个数。
本发明实施例中,在获取RN文件的文件依赖图后,对RN文件的文件依赖图进行遍历,获取文件依赖图中的节点,针对文件依赖图中的每个节点,判断节点对应代码文件的类型,需要判断的类型包括:预设入口文件类型、预设页面文件类型和预设组件文件类型。这三种类型,在RN源代码中并没有明确标识,只是由于转化为小程序代码的需要,需要引入这三种类型。下面分别对这三种文件类型做介绍:
预设入口文件类型:这个类型的RN代码文件对应于小程序中的app.js,整个小程序只有一个入口文件,即App实例,是全部页面共享的;预设组件文件类型:这个类型的RN代码文件对应于小程序中的Component对象;预设页面文件类型:这个类型的RN代码文件对应于小程序中的Page对象。
本发明实施例中,可以通过多种方式确定节点Pi对应的代码文件Qi的类型类型,具体的,在本发明提供的一个实施方式中,如图2所示,上述步骤102可以包括以下步骤:步骤1021、步骤1022和步骤1023,其中,
在步骤1021中,确定代码文件Qi中是否包含RN入口文件注册信息,如果包含RN入口文件注册信息,则确定代码文件Qi为预设入口文件类型。
本发明实施例中,考虑到在RN文件中入口文件的注册只会出现在入口文件中,因此可以通过判断代码文件Qi中是否包含RN入口文件注册信息,来确定代码文件Qi是否为预设入口文件类型,如果代码文件Qi中包含RN入口文件注册信息,则确定代码文件Qi为预设入口文件类型,否则代码文件Qi不为预设入口文件类型;其中,RN入口文件注册信息可以为语句“AppRegistry.registerComponent()”。
在实际处理中,可以首先获取代码文件Qi的AST,遍历AST中的每一个语句(CallExpression),如果AST中节点的callee的object的name为AppRegistry,则代码文件Qi为预设入口文件类型。
在步骤1022中,确定预设组件信息列表中是否包含代码文件Qi的标识,如果包含代码文件Qi的标识,则确定代码文件Qi为预设组件文件类型;其中,预设组件信息列表是基于对依赖代码文件Qi的代码文件Mi进行处理得到的,预设组件信息列表中记录有代码文件Mi引用的组件文件的标识。
本发明实施例中,代码文件的标识可以为代码文件的名称,也可以为代码文件的文件路径等。
本发明实施例中,判断一个RN代码文件是否为预设组件文件类型,是在依赖该RN代码文件的代码文件中进行判断的。
为了便于理解,结合一个实例进行描述,代码文件B为类型待确定的代码文件,如果判断代码文件B是否为预设组件文件类型,则需在引用代码文件B的代码文件中进行判断的,例如代码文件A是引用代码文件B的代码文件。具体判断逻辑为:获取代码文件A的AST,并遍历,查找该AST中节点类型为JSXElement的节点,其中,JSXElement节点对应的代码为组件代码,遍历完代码文件A的AST后,可获得代码文件A所引用的所有组件,将这些组件的名称存储在一个数组中,形成预设组件信息列表。如果代码文件B的名称存在于预设组件信息列表中,则代码文件B为预设组件类型文件。
在步骤1023中,如果代码文件Qi的类型不为预设入口文件类型和预设组件文件类型,则确定代码文件Qi的类型为预设页面文件类型。
本发明实施例中,通过步骤1021和步骤1022确定了文件依赖图中预设入口文件类型的代码文件和预设组件文件类型的代码文件,剩下的代码文件即为预设页面文件类型。
本发明实施例中,小程序文件由符合小程序语法规则的入口文件、页面文件和组件文件构成。
在步骤103中,如果代码文件Qi的类型为预设入口文件类型,则根据代码文件Qi生成小程序文件的入口文件。
本发明实施例中,小程序文件的入口文件、页面文件和组件文件均是由四部分构成的,四部分包括:配置文件、样式文件、布局文件和逻辑文件,其中,配置文件用于存储文件相关的配置,文件的后缀为.json;样式文件类似网页编程中的CSS,用于描述小程序功能页面的样式,文件的后缀为.wxss;布局文件(又称为“模板文件”)类似网页编程中的HTML,用于描述小程序功能页面的结构,文件的后缀为.wxml;逻辑文件用于进行功能页面的事件交互,文件的后缀为.js。
本发明实施例中,RN文件中是不区分配置文件、样式文件、布局文件和逻辑文件的,一个RN代码文件中既包括配置代码、样式代码、布局代码又包括逻辑代码。在转换成小程序文件时,需要将RN代码文件中的各类代码提取出来,输出到对应的小程序文件的代码文件中去。
本发明实施例中,小程序文件的入口文件中包括:第一配置文件、第一样式文件、第一布局文件和第一逻辑文件,可以通过多种方式根据代码文件Qi生成小程序文件的入口文件,具体的,在本发明提供的一个实施方式中,如图3所示,上述步骤103具体可以包括以下步骤:步骤1031、步骤1032、步骤1033和步骤1034,其中,
在步骤1031中,如果代码文件Qi的类型为预设入口文件类型,则获取代码文件Qi依赖的页面文件的文件路径,生成包含该文件路径的第一配置文件;其中,第一配置文件中pages对应的value为代码文件Qi依赖的页面文件的文件路径。
本发明实施例中,代码文件Qi依赖的页面文件包括:与代码文件Qi有直接依赖关系的页面文件和与代码文件Qi有间接依赖关系的页面文件。
本发明实施例中,小程序文件的配置文件需要根据文件类型生成其中的特定的内容。
本发明实施例中,小程序文件入口文件的配置文件用于配置小程序文件的全局,包括小程序的所有页面路径、网络超时时间、底部tab等。
本发明实施例中,第一配置文件的生成过程可以包括:创建一个app.json文件,将代码文件Qi依赖的页面文件的文件路径赋值到app.json类型文件中pages对应的value中。其中,代码文件Qi依赖的页面文件的文件路径可以在前述RN代码文件的类型判断过程中获取,并可以通过一个全局数组存储。如图4所示,示出了第一配置文件的示例图。
在步骤1032中,提取代码文件Qi中的样式代码,将提取到的样式代码转换为符合小程序语法规则的样式代码,生成包含符合小程序语法规则的样式代码的第一样式文件。
本发明实施例中,可以通过多种方式提取样式代码,在一个具体实施方式中,上述提取代码文件Qi中的样式代码的步骤,可以包括:
获取代码文件Qi的AST,并遍历,确定代码文件Qi的AST中的样式节点,从样式节点中提取样式代码,其中,样式节点为节点的callee对象的名称为StyleSheet的节点。
在一个例子中,首先创建一个*.wxss样式文件,通过以下代码获取代码文件Qi的AST中的样式节点:
if(node.callee.object&&node.callee.object.name==“StyleSheet”),从样式节点中获取样式代码,并新建一个用于存储样式代码的字符串变量finalStyle,对获取到的样式代码进行语法差异消除,主要消除RN的样式语法与小程序的样式语法不一致的地方,比如RN中的样式用驼峰命名,转化后的小程序样式代码需要用短横线规则命名,并存储在finalStyle中。在将所有样式代码消除差异后,将最终的finalStyle文本输出到前述创建的*.wxss样式文件中,得到第一样式文件。此外,可以将代码文件Qi的AST中的样式节点删除,以便后续确定逻辑节点。
在步骤1033中,提取代码文件Qi中的布局代码,将提取到的布局代码转换为符合小程序语法规则的布局代码,生成包含符合小程序语法规则的布局代码的第一布局文件。
本发明实施例中,可以通过多种方式提取布局代码,在一个具体实施方式中,上述提取代码文件Qi中的布局代码的步骤,可以包括:
获取代码文件Qi的AST,并遍历,确定代码文件Qi的AST中的布局节点,从布局节点中提取布局代码,其中,布局节点为节点类型为JSXElement的节点。
在一个例子中,首先创建一个*.wxml文件,从代码文件Qi的AST中布局节点的最外层开始提取节点文本,并输出到*.wxml文件中去,针对RN中布局引用的情况,将被引用的布局输出到小程序中的布局中去,将所有布局代码提取完并输出到*.wxml文件中,得到第一布局文件。此外,可以将代码文件Qi的AST中的布局节点删除,以便后续确定逻辑节点。
在步骤1034中,提取代码文件Qi中的逻辑代码,将提取到的逻辑代码转换为符合小程序语法规则的逻辑代码,生成包含符合小程序语法规则的逻辑代码的第一逻辑文件。
本发明实施例中,可以通过多种方式提取布局代码,在一个具体实施方式中,上述提取代码文件Qi中的逻辑代码的步骤,可以包括:
获取代码文件Qi的AST,并遍历,确定代码文件Qi的AST中的逻辑节点,从逻辑节点中提取逻辑代码,其中,逻辑节点为代码文件Qi的AST中样式节点和布局节点之外的节点。
本发明实施例中,由于代码文件Qi的AST中的样式节点和布局节点已被删除,因此剩下的节点都是逻辑相关的节点,即逻辑节点。
在一个例子中,首先创建一个*.js文件,从逻辑节点中提取逻辑代码,在消除小程序中不支持的语法后输出上述到*.js文件中,得到第一逻辑文件。
需要说明的是,小程序文件的逻辑文件分为页面逻辑文件和组件逻辑文件两种,在创建对应逻辑文件时,需要按照对应的语法规范,通过AST创建相应的节点进行完成。
在步骤104中,如果代码文件Qi的类型为预设组件文件类型,则根据代码文件Qi生成小程序文件的组件文件。
本发明实施例中,小程序文件的组件文件中包括:第二配置文件、第二样式文件、第二布局文件和第二逻辑文件,可以通过多种方式根据代码文件Qi生成小程序文件的组件文件。具体的,在本发明提供的一个实施方式中,如图5所示,上述步骤104具体可以包括以下步骤:步骤1041、步骤1042、步骤1043和步骤1044,其中,
在步骤1041中,如果代码文件Qi的类型为预设组件文件类型,则获取代码文件Qi依赖的组件文件的文件路径,生成包含该文件路径的第二配置文件;第二配置文件中usingComponents对应的value为代码文件Qi依赖的组件文件的文件路径。
本发明实施例中,代码文件Qi依赖的组件文件的文件路径仅包括:与代码文件Qi有直接依赖关系的组件文件。
本发明实施例中,第二配置文件的生成过程可以包括:创建一个*.json文件,将代码文件Qi依赖的组件文件的文件路径赋值到*.json文件的usingComponents对应的value中。其中,代码文件Qi依赖的组件文件的文件路径可以在前述RN代码文件的类型判断过程中获取,并可以通过一个全局Map存储。如图6所示,示出了第二配置文件的示例图。
在步骤1042中,提取代码文件Qi中的样式代码,将提取到的样式代码转换为符合小程序语法规则的样式代码,生成包含符合小程序语法规则的样式代码的第二样式文件。
在步骤1043中,提取代码文件Qi中的布局代码,将提取到的布局代码转换为符合小程序语法规则的布局代码,生成包含符合小程序语法规则的布局代码的第二布局文件。
在步骤1044中,提取代码文件Qi中的逻辑代码,将提取到的逻辑代码转换为符合小程序语法规则的逻辑代码,生成包含符合小程序语法规则的逻辑代码的第二逻辑文件。
本发明实施例中的步骤1042至步骤1044,与上述步骤1032至步骤1034的处理过程类似,在此不再赘述。
在步骤105中,如果代码文件Qi的类型为预设页面文件类型,则根据代码文件Qi生成小程序文件的页面文件。
本发明实施例中,小程序文件的页面文件中包括:第三配置文件、第三样式文件、第三布局文件和第三逻辑文件,可以通过多种方式根据代码文件Qi生成小程序文件的页面文件,具体的,在本发明提供的一个实施方式中,如图7所示,上述步骤105具体可以包括以下步骤:步骤1051、步骤1052、步骤1053和步骤1054,其中,
在步骤1051中,如果代码文件Qi的类型为预设页面文件类型,则生成符合小程序语法规则的第三配置文件;其中,第三配置文件中component属性设置为true。
本发明实施例中,第三配置文件的生成过程可以包括:创建一个*.json文件,在*.json文件中插入标准的组件配置,即将component属性设置为true。如图7所示,示出了第三配置文件的示例图。
在步骤1052中,提取代码文件Qi中的样式代码,将提取到的样式代码转换为符合小程序语法规则的样式代码,生成包含符合小程序语法规则的样式代码的第三样式文件。
在步骤1053中,提取代码文件Qi中的布局代码,将提取到的布局代码转换为符合小程序语法规则的布局代码,生成包含所述符合小程序语法规则的布局代码的第三布局文件。
在步骤1054中,提取代码文件Qi中的逻辑代码,将提取到的逻辑代码转换为符合小程序语法规则的逻辑代码,生成包含符合小程序语法规则的逻辑代码的第三逻辑文件。
本发明实施例中的步骤1052至步骤1054,与上述步骤1032至步骤1034的处理过程类似,在此不再赘述。
由上述实施例可见,该实施例中,通过生成RN文件的文件依赖图,对文件依赖图中每个节点对应的代码文件进行类型判断,依据判断结果将RN文件的代码文件转换成能在小程序运行环境中运行的小程序文件的入口文件、组件文件和页面文件。与现有技术相比,本发明实施例无需重复在小程序环境开发对应的小程序文件,使得原本需要开发和维护两套代码及系统的成本变成只需开发和维护一套代码及系统,降低了开发成本,提升了开发效率;此外,RN文件和小程序文件可以共用一套源代码,提高了代码复用率。
图9是本发明的一个实施例的将RN文件转换为小程序文件的装置的结构示意图,该装置应用于转换设备,在实际应用中,该转换设备可以包括:服务器、电脑和桌面机等计算机设备,也可以包括:智能手机、平板电脑和个人数字助理等移动终端,如图9所示,将RN文件转换为小程序文件的装置900,可以包括:获取模块901、确定模块902、第一生成模块903、第二生成模块904和第三生成模块905,其中,
获取模块901,用于获取RN文件的文件依赖图,其中,所述RN文件中包括多个基于RN语法规则编写的代码文件,所述文件依赖图中记录有所述RN文件中各代码文件的依赖关系,所述文件依赖图中包括多个节点,一个节点对应所述RN文件中的一个代码文件,且该节点中记录有对应代码文件的依赖文件信息;
确定模块902,用于针对所述文件依赖图中的每个节点Pi,确定所述节点Pi对应的代码文件Qi的类型,其中,所述节点Pi为所述文件依赖图中的第i个节点,1≤i≤N,N为所述文件依赖图中节点的个数;
第一生成模块903,用于在所述确定模块902确定所述代码文件Qi的类型为预设入口文件类型的情况下,根据所述代码文件Qi生成小程序文件的入口文件;其中,所述小程序文件由符合小程序语法规则的入口文件、页面文件和组件文件构成;
第二生成模块904,用于在所述确定模块902确定所述代码文件Qi的类型为预设组件文件类型的情况下,根据所述代码文件Qi生成小程序文件的组件文件;
第三生成模块905,用于在所述确定模块902确定所述代码文件Qi的类型为预设页面文件类型的情况下,根据所述代码文件Qi生成小程序文件的页面文件。
由上述实施例可见,该实施例中,通过生成RN文件的文件依赖图,对文件依赖图中每个节点对应的代码文件进行类型判断,依据判断结果将RN文件的代码文件转换成能在小程序运行环境中运行的小程序文件的入口文件、组件文件和页面文件。与现有技术相比,本发明实施例无需重复在小程序环境开发对应的小程序文件,使得原本需要开发和维护两套代码及系统的成本变成只需开发和维护一套代码及系统,降低了开发成本,提升了开发效率;此外,RN文件和小程序文件可以共用一套源代码,提高了代码复用率。
可选地,作为一个实施例,所述获取模块901,可以包括:
第一获取子模块,用于获取RN文件的入口文件;
第二获取子模块,用于获取所述RN文件的入口文件的AST;
第一提取子模块,用于遍历所述RN文件的入口文件的AST,查找其中的文件引用节点,从所述文件引用节点中提取所述RN文件的入口文件的依赖文件信息;
第三获取子模块,用于根据所述RN文件的入口文件的依赖文件信息,获取所述RN文件的入口文件的依赖文件;
处理子模块,用于对所述RN文件的入口文件的依赖文件重复与所述RN文件的入口文件相同的处理,直至处理的代码文件不存在依赖文件,得到对应的依赖文件信息;
第一生成子模块,用于根据所述RN文件的入口文件的依赖文件信息和处理得到的依赖文件信息,生成所述RN文件的文件依赖图。
可选地,作为一个实施例,所述确定模块902,可以包括:
第一确定子模块,用于确定所述代码文件Qi中是否包含RN入口文件注册信息,如果包含RN入口文件注册信息,则确定所述代码文件Qi为预设入口文件类型;
第二确定子模块,用于确定预设组件信息列表中是否包含所述代码文件Qi的标识,如果包含代码文件Qi的标识,则确定所述代码文件Qi为预设组件文件类型;其中,所述预设组件信息列表是基于对依赖所述代码文件Qi的代码文件Mi进行处理得到的,所述预设组件信息列表中记录有所述代码文件Mi引用的组件文件的标识;
第三确定子模块,用于在所述代码文件Qi的类型不为预设入口文件类型和预设组件文件类型的情况下,确定所述代码文件Qi的类型为预设页面文件类型。
可选地,作为一个实施例,所述小程序文件的入口文件中包括:第一配置文件、第一样式文件、第一布局文件和第一逻辑文件;
所述第一生成模块903,可以包括:
第二生成子模块,用于获取所述代码文件Qi依赖的页面文件的文件路径,生成包含该文件路径的第一配置文件,其中,所述第一配置文件中pages对应的value为所述代码文件Qi依赖的页面文件的文件路径;
第三生成子模块,用于提取所述代码文件Qi中的样式代码,将提取到的样式代码转换为符合小程序语法规则的样式代码,生成包含所述符合小程序语法规则的样式代码的第一样式文件;
第四生成子模块,用于提取所述代码文件Qi中的布局代码,将提取到的布局代码转换为符合小程序语法规则的布局代码,生成包含所述符合小程序语法规则的布局代码的第一布局文件;
第五生成子模块,用于提取所述代码文件Qi中的逻辑代码,将提取到的逻辑代码转换为符合小程序语法规则的逻辑代码,生成包含所述符合小程序语法规则的逻辑代码的第一逻辑文件。
可选地,作为一个实施例,所述小程序文件的页面文件中包括:第二配置文件、第二样式文件、第二布局文件和第二逻辑文件;
所述第二生成模块904,可以包括:
第六生成子模块,用于获取所述代码文件Qi依赖的组件文件的文件路径,生成包含该文件路径的第二配置文件,其中,所述第二配置文件中usingComponents对应的value为所述代码文件Qi依赖的组件文件的文件路径;
第七生成子模块,用于提取所述代码文件Qi中的样式代码,将提取到的样式代码转换为符合小程序语法规则的样式代码,生成包含所述符合小程序语法规则的样式代码的第二样式文件;
第八生成子模块,用于提取所述代码文件Qi中的布局代码,将提取到的布局代码转换为符合小程序语法规则的布局代码,生成包含所述符合小程序语法规则的布局代码的第二布局文件;
第九生成子模块,用于提取所述代码文件Qi中的逻辑代码,将提取到的逻辑代码转换为符合小程序语法规则的逻辑代码,生成包含所述符合小程序语法规则的逻辑代码的第二逻辑文件。
可选地,作为一个实施例,所述小程序文件的组件文件中包括:第三配置文件、第三样式文件、第三布局文件和第三逻辑文件;
所述第三生成模块905,可以包括:
第十生成子模块,用于生成符合小程序语法规则的第三配置文件,其中,所述第三配置文件中component属性设置为true;
第十一生成子模块,用于提取所述代码文件Qi中的样式代码,将提取到的样式代码转换为符合小程序语法规则的样式代码,生成包含所述符合小程序语法规则的样式代码的第三样式文件;
第十二生成子模块,用于提取所述代码文件Qi中的布局代码,将提取到的布局代码转换为符合小程序语法规则的布局代码,生成包含所述符合小程序语法规则的布局代码的第三布局文件;
第十三生成子模块,用于提取所述代码文件Qi中的逻辑代码,将提取到的逻辑代码转换为符合小程序语法规则的逻辑代码,生成包含所述符合小程序语法规则的逻辑代码的第三逻辑文件。
可选地,作为一个实施例,所述第三生成子模块、第七生成子模块和第十一生成子模块中的至少一个,可以包括:
第一获取单元,用于获取所述代码文件Qi的AST,并遍历;
第一确定单元,用于确定所述代码文件Qi的AST中的样式节点,其中,所述样式节点为节点的callee对象的名称为StyleSheet的节点;
第一提取单元,用于从所述样式节点中提取样式代码。
可选地,作为一个实施例,所述第四生成子模块、第八生成子模块和第十二生成子模块中的至少一个,可以包括:
第二获取单元,用于获取所述代码文件Qi的AST,并遍历;
第二确定单元,用于确定所述代码文件Qi的AST中的布局节点,其中,所述布局节点为节点类型为JSXElement的节点;
第二提取单元,用于从所述布局节点中提取布局代码。
可选地,作为一个实施例,所述第五生成子模块、第九生成子模块和第十三生成子模块中的至少一个,可以包括:
第三获取单元,用于获取所述代码文件Qi的AST,并遍历;
第三确定单元,用于确定所述代码文件Qi的AST中的逻辑节点,其中,所述逻辑节点为所述代码文件Qi的AST中样式节点和布局节点之外的节点;
第三提取单元,用于从所述逻辑节点中提取逻辑代码。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
根据本发明的一个实施例,本发明还提供了一种转换设备,所述转换设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如上述任意一个实施例所述的将RN文件转换为小程序文件的方法中的步骤。
根据本发明的一个实施例,本发明还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上述任意一个实施例所述的将RN文件转换为小程序文件的方法中的步骤。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
本领域内的技术人员应明白,本发明实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明实施例是参照根据本发明实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明实施例范围的所有变更和修改。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
以上对本发明所提供的一种将RN文件转换为小程序文件的方法、装置及转换设备,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

Claims (20)

1.一种将RN文件转换为小程序文件的方法,其特征在于,所述方法包括:
获取RN文件的文件依赖图,其中,所述RN文件是使用JavaScript语言基于RN语法规则编写的文件,所述RN文件中包括多个基于RN语法规则编写的代码文件,所述文件依赖图中记录有所述RN文件中各代码文件的依赖关系,所述文件依赖图中包括多个节点,一个节点对应所述RN文件中的一个代码文件,且该节点中记录有对应代码文件的依赖文件信息;
针对所述文件依赖图中的每个节点Pi,确定所述节点Pi对应的代码文件Qi的类型,如果所述代码文件Qi的类型为预设入口文件类型,则根据所述代码文件Qi生成小程序文件的入口文件;其中,所述小程序文件是使用JavaScript语言基于小程序语法规则编写的文件,所述小程序文件由符合小程序语法规则的入口文件、页面文件和组件文件构成,所述节点Pi为所述文件依赖图中的第i个节点,1≤i≤N,N为所述文件依赖图中节点的个数;
如果所述代码文件Qi的类型为预设组件文件类型,则根据所述代码文件Qi生成小程序文件的组件文件;
如果所述代码文件Qi的类型为预设页面文件类型,则根据所述代码文件Qi生成小程序文件的页面文件。
2.根据权利要求1所述的方法,其特征在于,所述获取RN文件的文件依赖图,包括:
获取RN文件的入口文件;
获取所述RN文件的入口文件的抽象语法树AST;
遍历所述RN文件的入口文件的AST,查找其中的文件引用节点,从所述文件引用节点中提取所述RN文件的入口文件的依赖文件信息;
根据所述RN文件的入口文件的依赖文件信息,获取所述RN文件的入口文件的依赖文件;
对所述RN文件的入口文件的依赖文件重复与所述RN文件的入口文件相同的处理,直至处理的代码文件不存在依赖文件,得到对应的依赖文件信息;
根据所述RN文件的入口文件的依赖文件信息和处理得到的依赖文件信息,生成所述RN文件的文件依赖图。
3.根据权利要求1所述的方法,其特征在于,所述确定所述节点Pi对应的代码文件Qi的类型,包括:
确定所述代码文件Qi中是否包含RN入口文件注册信息,如果包含RN入口文件注册信息,则确定所述代码文件Qi为预设入口文件类型;
确定预设组件信息列表中是否包含所述代码文件Qi的标识,如果包含代码文件Qi的标识,则确定所述代码文件Qi为预设组件文件类型;其中,所述预设组件信息列表是基于对依赖所述代码文件Qi的代码文件Mi进行处理得到的,所述预设组件信息列表中记录有所述代码文件Mi引用的组件文件的标识;
如果所述代码文件Qi的类型不为预设入口文件类型和预设组件文件类型,则确定所述代码文件Qi的类型为预设页面文件类型。
4.根据权利要求3所述的方法,其特征在于,所述小程序文件的入口文件中包括:第一配置文件、第一样式文件、第一布局文件和第一逻辑文件;
所述根据所述代码文件Qi生成小程序文件的入口文件,包括:
获取所述代码文件Qi依赖的页面文件的文件路径,生成包含该文件路径的第一配置文件,其中,所述第一配置文件中pages对应的value为所述代码文件Qi依赖的页面文件的文件路径;
提取所述代码文件Qi中的样式代码,将提取到的样式代码转换为符合小程序语法规则的样式代码,生成包含所述符合小程序语法规则的样式代码的第一样式文件;
提取所述代码文件Qi中的布局代码,将提取到的布局代码转换为符合小程序语法规则的布局代码,生成包含所述符合小程序语法规则的布局代码的第一布局文件;
提取所述代码文件Qi中的逻辑代码,将提取到的逻辑代码转换为符合小程序语法规则的逻辑代码,生成包含所述符合小程序语法规则的逻辑代码的第一逻辑文件。
5.根据权利要求3所述的方法,其特征在于,所述小程序文件的页面文件中包括:第二配置文件、第二样式文件、第二布局文件和第二逻辑文件;
所述根据所述代码文件Qi生成小程序文件的页面文件,包括:
获取所述代码文件Qi依赖的组件文件的文件路径,生成包含该文件路径的第二配置文件,其中,所述第二配置文件中usingComponents对应的value为所述代码文件Qi依赖的组件文件的文件路径;
提取所述代码文件Qi中的样式代码,将提取到的样式代码转换为符合小程序语法规则的样式代码,生成包含所述符合小程序语法规则的样式代码的第二样式文件;
提取所述代码文件Qi中的布局代码,将提取到的布局代码转换为符合小程序语法规则的布局代码,生成包含所述符合小程序语法规则的布局代码的第二布局文件;
提取所述代码文件Qi中的逻辑代码,将提取到的逻辑代码转换为符合小程序语法规则的逻辑代码,生成包含所述符合小程序语法规则的逻辑代码的第二逻辑文件。
6.根据权利要求3所述的方法,其特征在于,所述小程序文件的组件文件中包括:第三配置文件、第三样式文件、第三布局文件和第三逻辑文件;
所述根据所述代码文件Qi生成小程序文件的组件文件,包括:
生成符合小程序语法规则的第三配置文件,其中,所述第三配置文件中component属性设置为true;
提取所述代码文件Qi中的样式代码,将提取到的样式代码转换为符合小程序语法规则的样式代码,生成包含所述符合小程序语法规则的样式代码的第三样式文件;
提取所述代码文件Qi中的布局代码,将提取到的布局代码转换为符合小程序语法规则的布局代码,生成包含所述符合小程序语法规则的布局代码的第三布局文件;
提取所述代码文件Qi中的逻辑代码,将提取到的逻辑代码转换为符合小程序语法规则的逻辑代码,生成包含所述符合小程序语法规则的逻辑代码的第三逻辑文件。
7.根据权利要求4至6任一项所述的方法,其特征在于,所述提取所述代码文件Qi中的样式代码,包括:
获取所述代码文件Qi的AST,并遍历;
确定所述代码文件Qi的AST中的样式节点,其中,所述样式节点为节点的callee对象的名称为StyleSheet的节点;
从所述样式节点中提取样式代码。
8.根据权利要求4至6任一项所述的方法,其特征在于,所述提取所述代码文件Qi中的布局代码,包括:
获取所述代码文件Qi的AST,并遍历;
确定所述代码文件Qi的AST中的布局节点,其中,所述布局节点为节点类型为JSXElement的节点;
从所述布局节点中提取布局代码。
9.根据权利要求4至6任一项所述的方法,其特征在于,所述提取所述代码文件Qi中的逻辑代码,包括:
获取所述代码文件Qi的AST,并遍历;
确定所述代码文件Qi的AST中的逻辑节点,其中,所述逻辑节点为所述代码文件Qi的AST中样式节点和布局节点之外的节点;
从所述逻辑节点中提取逻辑代码。
10.一种将RN文件转换为小程序文件的装置,其特征在于,所述装置包括:
获取模块,用于获取RN文件的文件依赖图,其中,所述RN文件是使用JavaScript语言基于RN语法规则编写的文件,所述RN文件中包括多个基于RN语法规则编写的代码文件,所述文件依赖图中记录有所述RN文件中各代码文件的依赖关系,所述文件依赖图中包括多个节点,一个节点对应所述RN文件中的一个代码文件,且该节点中记录有对应代码文件的依赖文件信息;
确定模块,用于针对所述文件依赖图中的每个节点Pi,确定所述节点Pi对应的代码文件Qi的类型,其中,所述节点Pi为所述文件依赖图中的第i个节点,1≤i≤N,N为所述文件依赖图中节点的个数;
第一生成模块,用于在所述确定模块确定所述代码文件Qi的类型为预设入口文件类型的情况下,根据所述代码文件Qi生成小程序文件的入口文件;其中,所述小程序文件是使用JavaScript语言基于小程序语法规则编写的文件,所述小程序文件由符合小程序语法规则的入口文件、页面文件和组件文件构成;
第二生成模块,用于在所述确定模块确定所述代码文件Qi的类型为预设组件文件类型的情况下,根据所述代码文件Qi生成小程序文件的组件文件;
第三生成模块,用于在所述确定模块确定所述代码文件Qi的类型为预设页面文件类型的情况下,根据所述代码文件Qi生成小程序文件的页面文件。
11.根据权利要求10所述的装置,其特征在于,所述获取模块包括:
第一获取子模块,用于获取RN文件的入口文件;
第二获取子模块,用于获取所述RN文件的入口文件的AST;
第一提取子模块,用于遍历所述RN文件的入口文件的AST,查找其中的文件引用节点,从所述文件引用节点中提取所述RN文件的入口文件的依赖文件信息;
第三获取子模块,用于根据所述RN文件的入口文件的依赖文件信息,获取所述RN文件的入口文件的依赖文件;
处理子模块,用于对所述RN文件的入口文件的依赖文件重复与所述RN文件的入口文件相同的处理,直至处理的代码文件不存在依赖文件,得到对应的依赖文件信息;
第一生成子模块,用于根据所述RN文件的入口文件的依赖文件信息和处理得到的依赖文件信息,生成所述RN文件的文件依赖图。
12.根据权利要求10所述的装置,其特征在于,所述确定模块包括:
第一确定子模块,用于确定所述代码文件Qi中是否包含RN入口文件注册信息,如果包含RN入口文件注册信息,则确定所述代码文件Qi为预设入口文件类型;
第二确定子模块,用于确定预设组件信息列表中是否包含所述代码文件Qi的标识,如果包含代码文件Qi的标识,则确定所述代码文件Qi为预设组件文件类型;其中,所述预设组件信息列表是基于对依赖所述代码文件Qi的代码文件Mi进行处理得到的,所述预设组件信息列表中记录有所述代码文件Mi引用的组件文件的标识;
第三确定子模块,用于在所述代码文件Qi的类型不为预设入口文件类型和预设组件文件类型的情况下,确定所述代码文件Qi的类型为预设页面文件类型。
13.根据权利要求12所述的装置,其特征在于,所述小程序文件的入口文件中包括:第一配置文件、第一样式文件、第一布局文件和第一逻辑文件;
所述第一生成模块包括:
第二生成子模块,用于获取所述代码文件Qi依赖的页面文件的文件路径,生成包含该文件路径的第一配置文件,其中,所述第一配置文件中pages对应的value为所述代码文件Qi依赖的页面文件的文件路径;
第三生成子模块,用于提取所述代码文件Qi中的样式代码,将提取到的样式代码转换为符合小程序语法规则的样式代码,生成包含所述符合小程序语法规则的样式代码的第一样式文件;
第四生成子模块,用于提取所述代码文件Qi中的布局代码,将提取到的布局代码转换为符合小程序语法规则的布局代码,生成包含所述符合小程序语法规则的布局代码的第一布局文件;
第五生成子模块,用于提取所述代码文件Qi中的逻辑代码,将提取到的逻辑代码转换为符合小程序语法规则的逻辑代码,生成包含所述符合小程序语法规则的逻辑代码的第一逻辑文件。
14.根据权利要求12所述的装置,其特征在于,所述小程序文件的页面文件中包括:第二配置文件、第二样式文件、第二布局文件和第二逻辑文件;
所述第二生成模块包括:
第六生成子模块,用于获取所述代码文件Qi依赖的组件文件的文件路径,生成包含该文件路径的第二配置文件,其中,所述第二配置文件中usingComponents对应的value为所述代码文件Qi依赖的组件文件的文件路径;
第七生成子模块,用于提取所述代码文件Qi中的样式代码,将提取到的样式代码转换为符合小程序语法规则的样式代码,生成包含所述符合小程序语法规则的样式代码的第二样式文件;
第八生成子模块,用于提取所述代码文件Qi中的布局代码,将提取到的布局代码转换为符合小程序语法规则的布局代码,生成包含所述符合小程序语法规则的布局代码的第二布局文件;
第九生成子模块,用于提取所述代码文件Qi中的逻辑代码,将提取到的逻辑代码转换为符合小程序语法规则的逻辑代码,生成包含所述符合小程序语法规则的逻辑代码的第二逻辑文件。
15.根据权利要求12所述的装置,其特征在于,所述小程序文件的组件文件中包括:第三配置文件、第三样式文件、第三布局文件和第三逻辑文件;
所述第三生成模块包括:
第十生成子模块,用于生成符合小程序语法规则的第三配置文件,其中,所述第三配置文件中component属性设置为true;
第十一生成子模块,用于提取所述代码文件Qi中的样式代码,将提取到的样式代码转换为符合小程序语法规则的样式代码,生成包含所述符合小程序语法规则的样式代码的第三样式文件;
第十二生成子模块,用于提取所述代码文件Qi中的布局代码,将提取到的布局代码转换为符合小程序语法规则的布局代码,生成包含所述符合小程序语法规则的布局代码的第三布局文件;
第十三生成子模块,用于提取所述代码文件Qi中的逻辑代码,将提取到的逻辑代码转换为符合小程序语法规则的逻辑代码,生成包含所述符合小程序语法规则的逻辑代码的第三逻辑文件。
16.根据权利要求13至15任一项所述的装置,其特征在于,所述第三生成子模块、第七生成子模块和第十一生成子模块中的至少一个包括:
第一获取单元,用于获取所述代码文件Qi的AST,并遍历;
第一确定单元,用于确定所述代码文件Qi的AST中的样式节点,其中,所述样式节点为节点的callee对象的名称为StyleSheet的节点;
第一提取单元,用于从所述样式节点中提取样式代码。
17.根据权利要求13至15任一项所述的装置,其特征在于,第四生成子模块、第八生成子模块和第十二生成子模块中的至少一个包括:
第二获取单元,用于获取所述代码文件Qi的AST,并遍历;
第二确定单元,用于确定所述代码文件Qi的AST中的布局节点,其中,所述布局节点为节点类型为JSXElement的节点;
第二提取单元,用于从所述布局节点中提取布局代码。
18.根据权利要求13至15任一项所述的装置,其特征在于,第五生成子模块、第九生成子模块和第十三生成子模块中的至少一个包括:
第三获取单元,用于获取所述代码文件Qi的AST,并遍历;
第三确定单元,用于确定所述代码文件Qi的AST中的逻辑节点,其中,所述逻辑节点为所述代码文件Qi的AST中样式节点和布局节点之外的节点;
第三提取单元,用于从所述逻辑节点中提取逻辑代码。
19.一种转换设备,其特征在于,所述转换设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如权利要求1至9任一项所述的将RN文件转换为小程序文件的方法中的步骤。
20.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至9任一项所述的将RN文件转换为小程序文件的方法中的步骤。
CN201910605209.3A 2019-07-05 2019-07-05 将rn文件转换为小程序文件的方法、装置及转换设备 Active CN110362792B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910605209.3A CN110362792B (zh) 2019-07-05 2019-07-05 将rn文件转换为小程序文件的方法、装置及转换设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910605209.3A CN110362792B (zh) 2019-07-05 2019-07-05 将rn文件转换为小程序文件的方法、装置及转换设备

Publications (2)

Publication Number Publication Date
CN110362792A CN110362792A (zh) 2019-10-22
CN110362792B true CN110362792B (zh) 2023-05-23

Family

ID=68218125

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910605209.3A Active CN110362792B (zh) 2019-07-05 2019-07-05 将rn文件转换为小程序文件的方法、装置及转换设备

Country Status (1)

Country Link
CN (1) CN110362792B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111381825B (zh) * 2020-03-06 2021-04-09 北京五八信息技术有限公司 一种小程序的生成方法和装置
CN112214202B (zh) * 2020-09-27 2023-12-15 西思艾(北京)软件有限公司 一种无须写代码的手机程序开发系统
CN112596738B (zh) * 2020-12-28 2023-07-11 北京字跳网络技术有限公司 待测试前端页面的确定方法、装置、存储介质及电子设备

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104991773A (zh) * 2015-06-30 2015-10-21 小米科技有限责任公司 程序生成方法及装置
CN106547527A (zh) * 2015-09-22 2017-03-29 阿里巴巴集团控股有限公司 一种JavaScript文件构建方法及装置
CN107239318A (zh) * 2017-06-13 2017-10-10 腾讯科技(深圳)有限公司 应用转换方法、装置及设备
CN107665124A (zh) * 2017-09-14 2018-02-06 广东神马搜索科技有限公司 模块化JavaScript文件处理方法、设备和服务器
CN108804159A (zh) * 2018-06-14 2018-11-13 腾讯科技(深圳)有限公司 javascript模块加载方法及其预处理方法、装置和计算机设备
CN109614772A (zh) * 2018-11-20 2019-04-12 江苏通付盾信息安全技术有限公司 基于应用安装包文件的代码转换方法及装置

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104991773A (zh) * 2015-06-30 2015-10-21 小米科技有限责任公司 程序生成方法及装置
CN106547527A (zh) * 2015-09-22 2017-03-29 阿里巴巴集团控股有限公司 一种JavaScript文件构建方法及装置
CN107239318A (zh) * 2017-06-13 2017-10-10 腾讯科技(深圳)有限公司 应用转换方法、装置及设备
CN107665124A (zh) * 2017-09-14 2018-02-06 广东神马搜索科技有限公司 模块化JavaScript文件处理方法、设备和服务器
CN108804159A (zh) * 2018-06-14 2018-11-13 腾讯科技(深圳)有限公司 javascript模块加载方法及其预处理方法、装置和计算机设备
CN109614772A (zh) * 2018-11-20 2019-04-12 江苏通付盾信息安全技术有限公司 基于应用安装包文件的代码转换方法及装置

Also Published As

Publication number Publication date
CN110362792A (zh) 2019-10-22

Similar Documents

Publication Publication Date Title
CN106980504B (zh) 一种应用程序开发方法及其工具、设备
CN108415702B (zh) 一种移动终端应用界面动态渲染方法和装置
CN111209005B (zh) 程序文件的编译方法、装置和计算机可读存储介质
CN110362792B (zh) 将rn文件转换为小程序文件的方法、装置及转换设备
CN110442330B (zh) 列表组件转换方法、装置、电子设备及存储介质
CN110580147B (zh) 一种应用程序的开发方法和装置
CN113110825B (zh) 一种小程序的接口转换方法和装置
CN109241026B (zh) 数据管理的方法、装置及系统
CN111897553B (zh) 一种项目系统搭建方法、装置、设备及可读存储介质
CN110895471A (zh) 安装包生成方法、装置、介质及电子设备
CN110543299A (zh) 一种云计算管理平台代码生成方法和装置
CN106776266B (zh) 测试工具的配置方法及终端设备
CN112231197A (zh) 一种页面测试的方法、装置和存储介质
CN112269566B (zh) 脚本生成处理方法、装置、设备及系统
CN113360385A (zh) 一种测试方法、装置、设备及介质
CN104462157A (zh) 一种文本数据二次结构化的方法及装置
CN110716746B (zh) 将rn样式代码转换为小程序样式代码的方法及装置
CN111880785A (zh) 程序代码转换方法、装置,电子设备
CN112328241B (zh) 一种应用程序开发中创建Android库模块依赖关系的方法及装置
CN107273386B (zh) 一种数据库的XML Schema约束文件生成方法和装置
CN114675867A (zh) 一种数据处理方法、装置、服务器以及存储介质
CN116719525A (zh) 配置信息的生成方法、装置、电子设备及计算机存储介质
CN104408120A (zh) 源代码的处理方法及装置
CN118151933A (zh) 小程序生成方法、装置、电子设备及计算机可读存储介质
CN117472381A (zh) 应用的代码处理方法、装置、设备及存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
CB03 Change of inventor or designer information
CB03 Change of inventor or designer information

Inventor after: Peng Fei

Inventor after: Pu Huishu

Inventor after: Liu Shuai

Inventor after: Lv Qingchun

Inventor before: Peng Fei

Inventor before: Pu Huishu

Inventor before: Liu Shuai

Inventor before: Lv Qingchun