CN112631621A - 一种依赖包管理方法、装置、服务器及存储介质 - Google Patents

一种依赖包管理方法、装置、服务器及存储介质 Download PDF

Info

Publication number
CN112631621A
CN112631621A CN202011593372.1A CN202011593372A CN112631621A CN 112631621 A CN112631621 A CN 112631621A CN 202011593372 A CN202011593372 A CN 202011593372A CN 112631621 A CN112631621 A CN 112631621A
Authority
CN
China
Prior art keywords
dependent
package
dependent package
configuration file
current
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.)
Pending
Application number
CN202011593372.1A
Other languages
English (en)
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.)
Weiyiyun Hangzhou Holding Co ltd
Original Assignee
Weiyiyun Hangzhou Holding 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 Weiyiyun Hangzhou Holding Co ltd filed Critical Weiyiyun Hangzhou Holding Co ltd
Priority to CN202011593372.1A priority Critical patent/CN112631621A/zh
Publication of CN112631621A publication Critical patent/CN112631621A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/61Installation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management

Abstract

本发明实施例公开了一种依赖包管理方法、装置、服务器及存储介质。确定当前依赖包配置文件,基于下载失败对象中的依赖包包名、原始的依赖包包名以及各项目中的依赖包包名,确定当前的依赖包包名,使父级目录下的依赖对象记录所有需要下载的依赖包包名,达到对项目的需要下载的依赖包进行统一管理的目的;基于当前的依赖包包名,以及已下载对象中的依赖包包名,确定目标依赖包包名,使父级目录下的依赖对象仅记录所有未下载过的依赖包包名;对目标依赖包包名对应的依赖包进行统一下载,将下载完的目标依赖包包名剪切至当前依赖包配置文件的已下载对象中,避免对已下载过的依赖包进行重复下载,有利于对依赖包进行有序管理。

Description

一种依赖包管理方法、装置、服务器及存储介质
技术领域
本发明实施例涉及计算机技术,尤其涉及一种依赖包管理方法、装置、服务器及存储介质。
背景技术
随着计算机技术的快速发展,软件开发项目的数量越来越多并且规模越来越大。如今的前端技术通过多年沉淀,已经逐渐形成了格子的技术包,也就是项目中使用的依赖包。前端人员只需要通过package.json配置文件(依赖包配置文件),即可管理项目中的依赖包,执行npm install命令(依赖包下载命令),从远端下载依赖包配置文件中的依赖包,并将下载的依赖包放在node_modules目录(用来存放用包管理工具下载安装的包的文件夹)下。
目前,在实际开发过程中,每个项目都有属于自己的配置文件和node_modules目录下的依赖包,每个项目的依赖包的管理(例如安装管理、升级管理)都在各自项目中完成。然而,在迭代开发过程中,经常碰到大同小异的项目,如果在每个项目中管理自己的依赖包,需要在每个项目中下载相同的依赖包。
在实现本发明的过程中,发明人发现现有技术中至少存在如下问题:
从远端下载依赖包过程大概消耗30秒,碰到网络不好的情况时,依赖包下载时间更长;并且,如果碰到依赖包升级,在每个项目中都需要执行依赖包升级命令以升级每个项目中的依赖包,如果涉及的类似项目较多,依赖包升级过程就会变得繁琐。
发明内容
本发明实施例提供了一种依赖包管理方法、装置、服务器及存储介质,以实现在依赖包升级或安装过程中,提高对每个项目的依赖包的管理效率。
第一方面,本发明实施例提供了一种依赖包管理,该方法包括:确定至少两个项目的父级目录,在所述父级目录下搭建可运行node脚本的Javascript运行环境,其中,所述Javascript运行环境中的Node.js运行环境可运行node脚本;
在所述Javascript运行环境下,基于所述node脚本的脚本内容,确定当前依赖包配置文件;
基于所述当前依赖包配置文件中下载失败对象中的依赖包包名、所述当前依赖包配置文件中依赖对象中原始的依赖包包名以及各项目中的依赖包包名,确定所述当前依赖包配置文件的依赖对象中当前的依赖包包名;
基于所述当前的依赖包包名,以及所述当前依赖包配置文件的已下载对象中的依赖包包名,确定所述当前依赖包配置文件的依赖对象中的目标依赖包包名;
根据所述当前依赖包配置文件的依赖对象中的目标依赖包包名,下载所述目标依赖包包名对应的依赖包,将下载完的目标依赖包包名剪切至所述当前依赖包配置文件的已下载对象中,得到目标依赖包配置文件。
第二方面,本发明实施例还提供了一种依赖包管理装置,该装置包括:
运行环境搭建模块,用于确定至少两个项目的父级目录,在所述父级目录下搭建可运行node脚本的Javascript运行环境,其中,所述Javascript运行环境中的Node.js运行环境可运行node脚本;
当前依赖包配置文件确定模块,用于在所述Javascript运行环境下,基于所述node脚本的脚本内容,确定当前依赖包配置文件;
当前的依赖包包名确定模块,用于基于所述当前依赖包配置文件中下载失败对象中的依赖包包名、所述当前依赖包配置文件中依赖对象中原始的依赖包包名以及各项目中的依赖包包名,确定所述当前依赖包配置文件的依赖对象中当前的依赖包包名;
目标依赖包包名确定模块,用于基于所述当前的依赖包包名,以及所述当前依赖包配置文件的已下载对象中的依赖包包名,确定所述当前依赖包配置文件的依赖对象中的目标依赖包包名;
目标依赖包配置文件确定模块,用于根据所述当前依赖包配置文件的依赖对象中的目标依赖包包名,下载所述目标依赖包包名对应的依赖包,将下载完的目标依赖包包名剪切至所述当前依赖包配置文件的已下载对象中,得到目标依赖包配置文件。
第三方面,本发明实施例还提供了一种服务器,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如第一方面中任一项所述的依赖包管理方法。
第四方面,本发明实施例还提供了一种包含计算机可执行指令的存储介质,其中,所述计算机可执行指令在由计算机处理器执行时实现如第一方面任一项所述的依赖包管理方法。
本发明实施例提供的技术方案,在Javascript运行环境下,基于node脚本的脚本内容,确定当前依赖包配置文件,基于下载失败对象中的依赖包包名、原始的依赖包包名以及各项目中的依赖包包名,确定当前的依赖包包名,可以使父级目录下的依赖对象记录所有需要下载的依赖包包名,达到对项目的需要下载的依赖包进行统一管理的目的;基于当前的依赖包包名,以及已下载对象中的依赖包包名,确定目标依赖包包名,使父级目录下的依赖对象仅记录所有未下载过的依赖包包名;根据目标依赖包包名下载对应的依赖包,仅对未下载的依赖包包名进行统一下载,在项目较多的情况下,可以降低依赖包下载时间;进一步将下载完的目标依赖包包名剪切至当前依赖包配置文件的已下载对象中,使标依赖包配置文件的依赖对象中不存在未下载的依赖包包名,避免对已下载过的依赖包进行重复下载,简化了项目的安装过程或升级过程,有利于对依赖包进行有序管理。
附图说明
图1为本发明实施例一提供的一种依赖包管理方法的流程示意图;
图2为本发明实施例二提供的一种依赖包管理方法的流程示意图;
图3为本发明实施例二提供的查找各项目的依赖包的示意图;
图4为本发明实施例二提供的依赖包管理的整体示意图;
图5为本发明实施例三提供的一种依赖包管理装置的结构示意图;
图6为本发明实施例四提供的一种服务器的结构示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
实施例一
图1为本发明实施例一提供的一种依赖包管理方法的流程示意图,本实施例可适用于在项目安装或升级过程中,对至少两个项目的相同依赖包进行管理的情况,该方法可以由依赖包管理装置来执行,其中该装置可由软件和/或硬件实现,并一般集成在服务器中。具体参见图1所示,该方法可以包括如下步骤:
S110、确定至少两个项目的父级目录,在父级目录下搭建可运行node脚本的Javascript运行环境。
其中,所述至少两个项目指的是同一个父级目录下的相关联项目。在所述父级目录下,不同项目可以包括一个或多个相同的依赖包。所述Javascript运行环境用于开发项目,并在Javascript运行环境下运行node脚本对项目进行管理。
S120、在Javascript运行环境下,基于node脚本的脚本内容,确定当前依赖包配置文件。
其中,所述node脚本的脚本内容包括查找依赖包配置文件的查找指令和查找逻辑。可选地,所述基于所述node脚本的脚本内容,确定当前依赖包配置文件,包括:运行所述node脚本,执行所述node脚本中的配置文件查找命令,确定所述Javascript运行环境下是否存在第一依赖包配置文件;如果存在,将所述第一依赖包配置文件作为所述当前依赖包配置文件;如果不存在,执行所述node脚本中的配置文件创建命令,创建第二依赖包配置文件,将所述第二依赖包配置文件作为所述当前依赖包配置文件。
具体地,第一依赖包配置文件和第二依赖包配置文件用于管理对应项目中的依赖包。所述第一依赖包配置文件指的是父级目录下已经存在的依赖包配置文件,例如,在项目升级时,父级目录下存在旧版本的第一依赖包配置文件;所述第二依赖包配置文件指的是父级目录下空的依赖包配置文件,例如,在项目安装时,父级目录下不存在第二依赖包配置文件。所述父级目录下第一依赖包配置文件和第二依赖包配置文件中均包括依赖对象(dependencies对象)、已下载对象(load对象)以及下载失败对象(fail对象)。dependencies对象中包括未下载的依赖包包名,load对象中包括下载完成的依赖包包名,fail对象中包括下载失败的依赖包包名。
S130、基于当前依赖包配置文件中下载失败对象中的依赖包包名、当前依赖包配置文件中依赖对象中原始的依赖包包名以及各项目中的依赖包包名,确定当前依赖包配置文件的依赖对象中当前的依赖包包名。
本实施例中,当前依赖包配置文件中dependencies对象中的包括未下载的依赖包包名,即原始的依赖包包名,当前依赖包配置文件基于原始的依赖包包名下载依赖包;load对象中包括下载完成的依赖包包名,该对象依赖包包名对应的依赖包不需要再进行下载;fail对象中包括下载失败的依赖包包名,该对象中的依赖包包名对应的依赖包需要重新下载;项目的依赖包配置文件中包括dependencies对象,项目的dependencies对象中记录需要下载的依赖包对应的包名。
为了在父级目录下对需要下载的依赖包进行统一管理,可以将父级目录下的fail对象中下载失败的依赖包包名记录在父级目录下的dependencies对象中,并将fail对象中下载失败的依赖包包名删除;同时,将项目的dependencies对象中的依赖包包名记录在父级目录下dependencies对象中,并将项目的dependencies对象中的依赖包包名删除;进一步地,基于父级目录下的dependencies对象中原始的依赖包包名和新记录的依赖包包名,确定当前依赖包配置文件中dependencies对象中当前的依赖包包名。这样,父级目录下的dependencies对象记录所有需要下载的依赖包包名,即记录原始的依赖包包名、fail对象中下载失败的依赖包包名以及项目的dependencies对象中的依赖包包名,达到对项目的需要下载的依赖包进行统一管理的目的。
S140、基于当前的依赖包包名,以及当前依赖包配置文件的已下载对象中的依赖包包名,确定当前依赖包配置文件的依赖对象中的目标依赖包包名。
可选地,所述目标依赖包包名确定方法,包括:将当前的依赖包包名与当前依赖包配置文件的已下载对象中的依赖包包名比较,确定依赖对象中与已下载对象中相同的依赖包包名,以及确定依赖对象中与已下载对象中不同的依赖包包名;将相同的依赖包包名从依赖对象删除,将不同的依赖包包名在依赖对象中保留,得到目标依赖包包名。
可以理解的是,如果父级目录下的dependencies对象中存在与load对象中相同的依赖包包名,说明父级目录下的dependencies对象中存在已经下载过的依赖包,为了避免重复下载依赖包,将dependencies对象中的已下载过的依赖包包名删除;如果dependencies对象中存在与load对象中不同的依赖包包名,说明dependencies对象中存在未被下载过的依赖包,将dependencies对象中未被下载过的依赖包保留。这样,父级目录下的dependencies对象仅记录所有未下载过的依赖包包名,有利于后续根据未下载过的依赖包包名下载依赖包,避免下载重复的依赖包。
S150、根据当前依赖包配置文件的依赖对象中的目标依赖包包名,下载目标依赖包包名对应的依赖包,将下载完的目标依赖包包名剪切至当前依赖包配置文件的已下载对象中,得到目标依赖包配置文件。
可选地,通过运行node脚本,执行node脚本中的依赖包下载命令(如npm install命令或npm install–g命令),基于依赖包下载命令下载目标依赖包包名对应的依赖包,以使当前依赖包配置文件的依赖对象中未下载的依赖包全部下载完毕,将下载完的目标依赖包包名剪切至当前依赖包配置文件的已下载对象中,得到目标依赖包配置文件。这样,目标依赖包配置文件的依赖对象中不存在未下载的依赖包包名。
本发明实施例提供的技术方案,在Javascript运行环境下,基于node脚本的脚本内容,确定当前依赖包配置文件,基于下载失败对象中的依赖包包名、原始的依赖包包名以及各项目中的依赖包包名,确定当前的依赖包包名,可以使父级目录下的依赖对象记录所有需要下载的依赖包包名,达到对项目的需要下载的依赖包进行统一管理的目的;基于当前的依赖包包名,以及已下载对象中的依赖包包名,确定目标依赖包包名,使父级目录下的依赖对象仅记录所有未下载过的依赖包包名;根据目标依赖包包名下载对应的依赖包,仅对未下载的依赖包包名进行统一下载,在项目较多的情况下,可以降低依赖包下载时间;进一步将下载完的目标依赖包包名剪切至当前依赖包配置文件的已下载对象中,使标依赖包配置文件的依赖对象中不存在未下载的依赖包包名,避免对已下载过的依赖包进行重复下载,简化了项目的安装过程或升级过程,有利于对依赖包进行有序管理。
实施例二
图2为本发明实施例二提供的一种依赖包管理方法的流程示意图。本实施例的技术方案在上述实施例的基础上进行了细化。具体细化了当前的依赖包包名的确定过程。在该方法实施例中未详尽描述的部分请参考上述实施例。具体参见图2所示,该方法可以包括如下步骤:
S210、确定至少两个项目的父级目录,在父级目录下搭建可运行node脚本的Javascript运行环境。
S220、在Javascript运行环境下,基于node脚本的脚本内容,确定当前依赖包配置文件。
S230、运行node脚本,执行node脚本中的下载失败对象查找命令,查找当前依赖包配置文件的下载失败对象是否存在对象,如果当前依赖包配置文件中的下载失败对象存在对象,将下载失败对象中的对象剪切至当前依赖包配置文件的依赖对象中。
具体地,执行下载失败对象查找命令,查找当前依赖包配置文件的fail对象中的依赖包(package.json)包名,如果当前依赖包配置文件中fail对象中存在依赖包包名,说明当前依赖包配置文件的fail对象中存在下载失败的依赖包,需要对下载失败的依赖包进行重新下载,将fail对象中的依赖包包名剪切至当前依赖包配置文件的dependencies对象中,以将下载失败的依赖包作为未下载过的依赖包。
S240、运行node脚本,执行node脚本中的项目依赖包查找命令,查找各项目的至少一个依赖包,根据查找结果确定当前依赖包配置文件的已下载对象中是否存在任一项目的依赖包,如果当前依赖包配置文件的已下载对象中不存在任一项目的依赖包,将该项目的依赖包包名剪切至当前依赖包配置文件的依赖对象中。
如图3所示为查找各项目的依赖包的示意图。结合图3具体地解释,执行项目依赖包查找命令,查找项目的依赖包配置文件(package.json)的dependencies对象中的依赖包包名,确定当前依赖包配置文件的load对象中是否存在项目中的依赖包,如果不存在,说明项目的dependencies对象中存在未下载过的依赖包对应的包名,将项目的dependencies对象中未下载过的依赖包对应的依赖包包名剪切至当前依赖包配置文件的dependencies对象中,并将项目的dependencies对象中与当前依赖包配置文件的load对象中相同的依赖包包名删除。
基于S230~S240,可以确定当前依赖包配置文件的剪切得到的依赖包包名。
表1为当前依赖包配置文件的三个对象中原始的依赖包包名,表2为三个项目的dependencies对象中的依赖包包名。结合表1和表2示例性地解释S230~S240。
Figure BDA0002869257220000101
表1:当前依赖包配置文件的三个对象中的依赖包包名
Figure BDA0002869257220000111
表2:三个项目的dependencies对象中的依赖包包名
由表1可以看出,当前依赖包配置文件的fail对象中存在依赖包包名:包6和包7,将包6和包7剪切至当前依赖包配置文件的dependencies对象;并且,当前依赖包配置文件的load对象中不存在包5、包9和包8,当前依赖包配置文件的load对象中包括项目3中的包4,将包5、包9和包8剪切至当前依赖包配置文件的dependencies对象中,同时将项目3中包4删除。基于上述过程,当前依赖包配置文件的dependencies对象中剪切得到的依赖包包名为:包6、包7、包5、包9和包8。
S250、根据当前依赖包配置文件中依赖对象中原始的依赖包包名,以及剪切得到的依赖包包名,确定所述当前的依赖包包名。
具体地,将原始的依赖包包名,以及剪切得到的依赖包包名汇总,得到当前的依赖包包名。
参见S230~S240的示例,当前依赖包配置文件的dependencies对象中剪切得到的依赖包包名为:包6、包7、包5、包9和包8,原始的依赖包包名为:包1、包2,则当前的依赖包包名为:包1、包2、包6、包7、包5、包9和包8。
S260、基于当前的依赖包包名,以及当前依赖包配置文件的已下载对象中的依赖包包名,确定当前依赖包配置文件的依赖对象中的目标依赖包包名。
如前述实施例所述,将所述当前的依赖包包名与所述当前依赖包配置文件的已下载对象中的依赖包包名比较,确定所述依赖对象中与所述已下载对象中相同的依赖包包名,以及确定所述依赖对象中与所述已下载对象中不同的依赖包包名;将相同的依赖包包名从所述依赖对象删除,将不同的依赖包包名在所述依赖对象中保留,得到所述目标依赖包包名。
参见S250的示例,load对象中依赖包包名为:包2、包4,由此可以看出,包2同时出现在dependencies对象和load对象中,将dependencies对象中的包2删除,保留其他依赖包包名,则目标依赖包为:包1、包6、包7、包5、包9。
通过上述步骤,可以将当前依赖包配置文件的fail对象中的依赖包全部剪切至当前依赖包配置文件的dependencies对象,并将项目中的与load对象中不同的依赖包剪切至当前依赖包配置文件的dependencies对象中,以使当前的依赖包包名涵盖父级目录下所有未下载过的依赖包对应的依赖包包名,有利于后续基于当前的依赖包包名统一下载对应的依赖包,无需针对每个项目的配置文件的dependencies对象中的所有的依赖包包名下载依赖包,并有利于对各项目的依赖包进行管理。并且,将项目中与load对象中相同的依赖包包名删除后,项目中不存在已下载依赖包,避免后续重复下载依赖包,进一步提高整个应用程序的依赖包下载效率。
S270、根据当前依赖包配置文件的依赖对象中的目标依赖包包名,下载目标依赖包包名对应的依赖包,将下载完的目标依赖包包名剪切至当前依赖包配置文件的已下载对象中,得到目标依赖包配置文件。
如前述实施例所述,运行所述node脚本,执行所述node脚本中的依赖包下载命令,基于所述依赖包下载命令下载所述目标依赖包包名对应的依赖包。
参见如S260的示例,当前依赖包配置文件的dependencies对象中目标依赖包为:包1、包6、包7、包5、包9,load对象中依赖包包名为:包2、包4,运行node脚本,执行node脚本中的依赖包下载命令,分别下载包1、包6、包7、包5对应的依赖包,下载完成后,将包1、包6、包7、包5剪切至load对象中,则load对象中的依赖包包名为:包2、包4、包1、包6、包7、包5、包9,当前依赖包配置文件的dependencies对象中不存在依赖包包名,得到目标依赖包配置文件。
通过上述方法,仅对目标依赖包包名对应的依赖包进行下载,尤其在父级目录下的项目较多时,可以降低依赖包下载时间;将下载完的目标依赖包包名剪切至当前依赖包配置文件的已下载对象中,当前依赖包配置文件的依赖对象中不存在未下载过的依赖包包名,避免对已下载过的依赖包进行重复下载,简化了项目的安装过程或升级过程,提高了对依赖包的管理效率。
可以理解的是,在网络不通畅、依赖包下载源版本问题以及node版本问题等情况下,会导致依赖包下载失败。本实施例提供异常检测机制,对依赖包下载过程进行异常检测。
具体地,如果存在未下载成功的依赖包,重新运行所述node脚本,再次执行所述node脚本中的依赖包下载命令,基于再次执行的依赖包下载命令对未下载成功的依赖包重新下载。例如,在网络不通畅时,如果检测到未下载成功的依赖包,将该依赖包对应的依赖包包名从父级目录下的dependencies对象中剪切至fail对象中,待网络通畅时,重新运行所述node脚本,再次执行node脚本中的依赖包下载命令。
具体地,如果存在未下载成功的依赖包,运行所述node脚本,执行依赖包异常捕捉命令,基于所述依赖包异常捕捉命令捕捉未下载成功的依赖包对应的异常信息,并将所述异常信息进行提示。例如,依赖包下载源出现异常,或者node版本不兼容时,运行所述node脚本,捕捉未下载成功的依赖包对应的异常信息,将该依赖包对应的依赖包包名从父级目录下的dependencies对象中剪切至fail对象中,将异常信息进行显示,待人工修复后,重新对目标依赖包包名对应的依赖包进行下载。
如图4所示为依赖包管理的整体示意图,通过上述异常检测机制,实时检测依赖包下载过程,重新执行依赖包下载操作或者进行异常捕捉,保证对依赖包进行全面管理。
实施例三
图5为本发明实施例三提供的一种依赖包管理装置的结构示意图。参见图5所示,该装置包括:运行环境搭建模块310、当前依赖包配置文件确定模块320、当前的依赖包包名确定模块330、目标依赖包包名确定模块340以及目标依赖包配置文件确定模块350。
其中,运行环境搭建模块310,用于确定至少两个项目的父级目录,在所述父级目录下搭建可运行node脚本的Javascript运行环境,其中,所述Javascript运行环境中的Node.js运行环境可运行node脚本;
当前依赖包配置文件确定模块320,用于在所述Javascript运行环境下,基于所述node脚本的脚本内容,确定当前依赖包配置文件;
当前的依赖包包名确定模块330,用于基于所述当前依赖包配置文件中下载失败对象中的依赖包包名、所述当前依赖包配置文件中依赖对象中原始的依赖包包名以及各项目中的依赖包包名,确定所述当前依赖包配置文件的依赖对象中当前的依赖包包名;
目标依赖包包名确定模块340,用于基于所述当前的依赖包包名,以及所述当前依赖包配置文件的已下载对象中的依赖包包名,确定所述当前依赖包配置文件的依赖对象中的目标依赖包包名;
目标依赖包配置文件确定模块350,用于根据所述当前依赖包配置文件的依赖对象中的目标依赖包包名,下载所述目标依赖包包名对应的依赖包,将下载完的目标依赖包包名剪切至所述当前依赖包配置文件的已下载对象中,得到目标依赖包配置文件。
本发明实施例提供的技术方案,在Javascript运行环境下,基于node脚本的脚本内容,确定当前依赖包配置文件,基于下载失败对象中的依赖包包名、原始的依赖包包名以及各项目中的依赖包包名,确定当前的依赖包包名,可以使父级目录下的依赖对象记录所有需要下载的依赖包包名,达到对项目的需要下载的依赖包进行统一管理的目的;基于当前的依赖包包名,以及已下载对象中的依赖包包名,确定目标依赖包包名,使父级目录下的依赖对象仅记录所有未下载过的依赖包包名;根据目标依赖包包名下载对应的依赖包,仅对未下载的依赖包包名进行统一下载,在项目较多的情况下,可以降低依赖包下载时间;进一步将下载完的目标依赖包包名剪切至当前依赖包配置文件的已下载对象中,使标依赖包配置文件的依赖对象中不存在未下载的依赖包包名,避免对已下载过的依赖包进行重复下载,简化了项目的安装过程或升级过程,有利于对依赖包进行有序管理。
在上述各技术方案的基础上,当前依赖包配置文件确定模块320还用于,运行所述node脚本,执行所述node脚本中的配置文件查找命令,确定所述Javascript运行环境下是否存在第一依赖包配置文件;
如果存在,将所述第一依赖包配置文件作为所述当前依赖包配置文件;
如果不存在,执行所述node脚本中的配置文件创建命令,创建第二依赖包配置文件,将所述第二依赖包配置文件作为所述当前依赖包配置文件。
在上述各技术方案的基础上,当前的依赖包包名确定模块330还用于,如果所述当前依赖包配置文件中的下载失败对象存在对象,将所述下载失败对象中的对象剪切至所述当前依赖包配置文件的依赖对象中;和/或,
如果当前依赖包配置文件的已下载对象中不存在任一项目的依赖包,将该项目的依赖包包名剪切至所述当前依赖包配置文件的依赖对象中;
根据所述当前依赖包配置文件中依赖对象中原始的依赖包包名,以及剪切得到的依赖包包名,确定所述当前的依赖包包名。
在上述各技术方案的基础上,该装置还包括:下载失败对象确定模块;其中,下载失败对象确定模块,用于运行所述node脚本,执行所述node脚本中的下载失败对象查找命令,查找所述当前依赖包配置文件的下载失败对象是否存在对象。
在上述各技术方案的基础上,该装置还包括:项目的依赖包确定模块;其中,项目的依赖包确定模块,用于运行所述node脚本,执行所述node脚本中的项目依赖包查找命令,查找各项目的至少一个依赖包,根据查找结果确定所述当前依赖包配置文件的已下载对象中是否存在任一项目的依赖包。
在上述各技术方案的基础上,目标依赖包包名确定模块340还用于,将所述当前的依赖包包名与所述当前依赖包配置文件的已下载对象中的依赖包包名比较,确定所述依赖对象中与所述已下载对象中相同的依赖包包名,以及确定所述依赖对象中与所述已下载对象中不同的依赖包包名;
将相同的依赖包包名从所述依赖对象删除,将不同的依赖包包名在所述依赖对象中保留,得到所述目标依赖包包名。
在上述各技术方案的基础上,目标依赖包配置文件确定模块350还用于,运行所述node脚本,执行所述node脚本中的依赖包下载命令,基于所述依赖包下载命令下载所述目标依赖包包名对应的依赖包。
在上述各技术方案的基础上,目标依赖包配置文件确定模块350还用于,如果存在未下载成功的依赖包,重新运行所述node脚本,再次执行所述node脚本中的依赖包下载命令,基于再次执行的依赖包下载命令对未下载成功的依赖包重新下载。
在上述各技术方案的基础上,目标依赖包配置文件确定模块350还用于,如果存在未下载成功的依赖包,运行所述node脚本,执行依赖包异常捕捉命令,基于所述依赖包异常捕捉命令捕捉未下载成功的依赖包对应的异常信息,并将所述异常信息进行提示。
实施例四
图6为本发明实施例四提供的一种服务器的结构示意图。图6示出了适于用来实现本发明实施方式的示例性服务器12的框图。图6显示的服务器12仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图6所示,服务器12以通用计算设备的形式表现。服务器12的组件可以包括但不限于:一个或者多个处理器或者处理单元16,系统存储器28,连接不同系统组件(包括系统存储器28和处理单元16)的总线18。
总线18表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(ISA)总线,微通道体系结构(MAC)总线,增强型ISA总线、视频电子标准协会(VESA)局域总线以及外围组件互连(PCI)总线。
服务器12典型地包括多种计算机系统可读介质。这些介质可以是任何能够被服务器12访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。
系统存储器28可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(RAM)30和/或高速缓存32。服务器12可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统34可以用于读写不可移动的、非易失性磁介质(图6未显示,通常称为“硬盘驱动器”)。尽管图6中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如CD-ROM,DVD-ROM或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线18相连。系统存储器28可以包括至少一个程序产品,该程序产品具有一组(例如依赖包管理模块的运行环境搭建模块310、当前依赖包配置文件确定模块320、当前的依赖包包名确定模块330、目标依赖包包名确定模块340以及目标依赖包配置文件确定模块350)程序模块,这些程序模块被配置以执行本发明各实施例的功能。
具有一组(例如依赖包管理模块的运行环境搭建模块310、当前依赖包配置文件确定模块320、当前的依赖包包名确定模块330、目标依赖包包名确定模块340以及目标依赖包配置文件确定模块350)程序模块46的程序/实用工具44,可以存储在例如系统存储器28中,这样的程序模块46包括但不限于操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块46通常执行本发明所描述的实施例中的功能和/或方法。
服务器12也可以与一个或多个外部设备14(例如键盘、指向设备、显示器24等)通信,还可与一个或者多个使得用户能与该服务器12交互的设备通信,和/或与使得该服务器12能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口22进行。并且,服务器12还可以通过网络适配器20与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器20通过总线18与服务器12的其它模块通信。应当明白,尽管图中未示出,可以结合服务器12使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
处理单元16通过运行存储在系统存储器28中的程序,从而执行各种功能应用以及数据处理,例如实现本发明实施例所提供的一种依赖包管理方法,该方法包括:
确定至少两个项目的父级目录,在所述父级目录下搭建可运行node脚本的Javascript运行环境,其中,所述Javascript运行环境中的Node.js运行环境可运行node脚本;
在所述Javascript运行环境下,基于所述node脚本的脚本内容,确定当前依赖包配置文件;
基于所述当前依赖包配置文件中下载失败对象中的依赖包包名、所述当前依赖包配置文件中依赖对象中原始的依赖包包名以及各项目中的依赖包包名,确定所述当前依赖包配置文件的依赖对象中当前的依赖包包名;
基于所述当前的依赖包包名,以及所述当前依赖包配置文件的已下载对象中的依赖包包名,确定所述当前依赖包配置文件的依赖对象中的目标依赖包包名;
根据所述当前依赖包配置文件的依赖对象中的目标依赖包包名,下载所述目标依赖包包名对应的依赖包,将下载完的目标依赖包包名剪切至所述当前依赖包配置文件的已下载对象中,得到目标依赖包配置文件。
处理单元16通过运行存储在系统存储器28中的程序,从而执行各种功能应用以及数据处理,例如实现本发明实施例所提供的一种依赖包管理方法。
当然,本领域技术人员可以理解,处理器还可以实现本发明任意实施例所提供的一种依赖包管理方法的技术方案。
实施例五
本发明实施例五还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本发明实施例所提供的一种依赖包管理方法,该方法包括:
确定至少两个项目的父级目录,在所述父级目录下搭建可运行node脚本的Javascript运行环境,其中,所述Javascript运行环境中的Node.js运行环境可运行node脚本;
在所述Javascript运行环境下,基于所述node脚本的脚本内容,确定当前依赖包配置文件;
基于所述当前依赖包配置文件中下载失败对象中的依赖包包名、所述当前依赖包配置文件中依赖对象中原始的依赖包包名以及各项目中的依赖包包名,确定所述当前依赖包配置文件的依赖对象中当前的依赖包包名;
基于所述当前的依赖包包名,以及所述当前依赖包配置文件的已下载对象中的依赖包包名,确定所述当前依赖包配置文件的依赖对象中的目标依赖包包名;
根据所述当前依赖包配置文件的依赖对象中的目标依赖包包名,下载所述目标依赖包包名对应的依赖包,将下载完的目标依赖包包名剪切至所述当前依赖包配置文件的已下载对象中,得到目标依赖包配置文件。
当然,本发明实施例所提供的一种计算机可读存储介质,其上存储的计算机程序不限于如上的方法操作,还可以执行本发明任意实施例所提供的一种依赖包管理方法中的相关操作。
本发明实施例的计算机存储介质,可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、系统或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、系统或者器件使用或者与其结合使用。
计算机可读的信号介质可以包括在当前的依赖包包名、已下载对象中的依赖包包名、目标依赖包包名等,其中承载了计算机可读的程序代码。这种传播的当前的依赖包包名、已下载对象中的依赖包包名、目标依赖包包名等形式。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、系统或者器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于无线、电线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如”C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
值得注意的是,上述依赖包管理模块的实施例中,所包括的各个模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。

Claims (12)

1.一种依赖包管理方法,其特征在于,包括:
确定至少两个项目的父级目录,在所述父级目录下搭建可运行node脚本的Javascript运行环境,其中,所述Javascript运行环境中的Node.js运行环境可运行node脚本;
在所述Javascript运行环境下,基于所述node脚本的脚本内容,确定当前依赖包配置文件;
基于所述当前依赖包配置文件中下载失败对象中的依赖包包名、所述当前依赖包配置文件中依赖对象中原始的依赖包包名以及各项目中的依赖包包名,确定所述当前依赖包配置文件的依赖对象中当前的依赖包包名;
基于所述当前的依赖包包名,以及所述当前依赖包配置文件的已下载对象中的依赖包包名,确定所述当前依赖包配置文件的依赖对象中的目标依赖包包名;
根据所述当前依赖包配置文件的依赖对象中的目标依赖包包名,下载所述目标依赖包包名对应的依赖包,将下载完的目标依赖包包名剪切至所述当前依赖包配置文件的已下载对象中,得到目标依赖包配置文件。
2.根据权利要求1所述的方法,其特征在于,所述基于所述node脚本的脚本内容,确定当前依赖包配置文件,包括:
运行所述node脚本,执行所述node脚本中的配置文件查找命令,确定所述Javascript运行环境下是否存在第一依赖包配置文件;
如果存在,将所述第一依赖包配置文件作为所述当前依赖包配置文件;
如果不存在,执行所述node脚本中的配置文件创建命令,创建第二依赖包配置文件,将所述第二依赖包配置文件作为所述当前依赖包配置文件。
3.根据权利要求1所述的方法,其特征在于,所述基于所述当前依赖包配置文件中下载失败对象中的依赖包包名、所述当前依赖包配置文件中依赖对象中原始的依赖包包名以及各项目中的依赖包包名,确定所述当前依赖包配置文件的依赖对象中当前的依赖包包名,包括:
如果所述当前依赖包配置文件中的下载失败对象存在对象,将所述下载失败对象中的对象剪切至所述当前依赖包配置文件的依赖对象中;和/或,
如果当前依赖包配置文件的已下载对象中不存在任一项目的依赖包,将该项目的依赖包包名剪切至所述当前依赖包配置文件的依赖对象中;
根据所述当前依赖包配置文件中依赖对象中原始的依赖包包名,以及剪切得到的依赖包包名,确定所述当前的依赖包包名。
4.根据权利要求3所述的方法,其特征在于,在所述将所述下载失败对象中的对象剪切至所述当前依赖包配置文件的依赖对象中之前,所述方法还包括:
运行所述node脚本,执行所述node脚本中的下载失败对象查找命令,查找所述当前依赖包配置文件的下载失败对象是否存在对象。
5.根据权利要求3所述的方法,其特征在于,在所述将该项目的依赖包添加至所述当前依赖包配置文件的依赖对象中之前,所述方法还包括:
运行所述node脚本,执行所述node脚本中的项目依赖包查找命令,查找各项目的至少一个依赖包,根据查找结果确定所述当前依赖包配置文件的已下载对象中是否存在任一项目的依赖包。
6.根据权利要求1所述的方法,其特征在于,所述基于所述当前的依赖包包名,以及所述当前依赖包配置文件的已下载对象中的依赖包包名,确定所述当前依赖包配置文件的依赖对象中的目标依赖包包名,包括:
将所述当前的依赖包包名与所述当前依赖包配置文件的已下载对象中的依赖包包名比较,确定所述依赖对象中与所述已下载对象中相同的依赖包包名,以及确定所述依赖对象中与所述已下载对象中不同的依赖包包名;
将相同的依赖包包名从所述依赖对象删除,将不同的依赖包包名在所述依赖对象中保留,得到所述目标依赖包包名。
7.根据权利要求1所述的方法,其特征在于,所述根据所述当前依赖包配置文件的依赖对象中的目标依赖包包名,下载所述目标依赖包包名对应的依赖包,包括:
运行所述node脚本,执行所述node脚本中的依赖包下载命令,基于所述依赖包下载命令下载所述目标依赖包包名对应的依赖包。
8.根据权利要求7所述的方法,其特征在于,还包括:
如果存在未下载成功的依赖包,重新运行所述node脚本,再次执行所述node脚本中的依赖包下载命令,基于再次执行的依赖包下载命令对未下载成功的依赖包重新下载。
9.根据权利要求7或8所述的方法,其特征在于,还包括:
如果存在未下载成功的依赖包,运行所述node脚本,执行依赖包异常捕捉命令,基于所述依赖包异常捕捉命令捕捉未下载成功的依赖包对应的异常信息,并将所述异常信息进行提示。
10.一种依赖包管理装置,其特征在于,包括:
运行环境搭建模块,用于确定至少两个项目的父级目录,在所述父级目录下搭建可运行node脚本的Javascript运行环境,其中,所述Javascript运行环境中的Node.js运行环境可运行node脚本;
当前依赖包配置文件确定模块,用于在所述Javascript运行环境下,基于所述node脚本的脚本内容,确定当前依赖包配置文件;
当前的依赖包包名确定模块,用于基于所述当前依赖包配置文件中下载失败对象中的依赖包包名、所述当前依赖包配置文件中依赖对象中原始的依赖包包名以及各项目中的依赖包包名,确定所述当前依赖包配置文件的依赖对象中当前的依赖包包名;
目标依赖包包名确定模块,用于基于所述当前的依赖包包名,以及所述当前依赖包配置文件的已下载对象中的依赖包包名,确定所述当前依赖包配置文件的依赖对象中的目标依赖包包名;
目标依赖包配置文件确定模块,用于根据所述当前依赖包配置文件的依赖对象中的目标依赖包包名,下载所述目标依赖包包名对应的依赖包,将下载完的目标依赖包包名剪切至所述当前依赖包配置文件的已下载对象中,得到目标依赖包配置文件。
11.一种服务器,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1-9中任一项所述的依赖包管理方法。
12.一种包含计算机可执行指令的存储介质,其特征在于,所述计算机可执行指令在由计算机处理器执行时实现如权利要求1-9中任一项所述的依赖包管理方法。
CN202011593372.1A 2020-12-29 2020-12-29 一种依赖包管理方法、装置、服务器及存储介质 Pending CN112631621A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011593372.1A CN112631621A (zh) 2020-12-29 2020-12-29 一种依赖包管理方法、装置、服务器及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011593372.1A CN112631621A (zh) 2020-12-29 2020-12-29 一种依赖包管理方法、装置、服务器及存储介质

Publications (1)

Publication Number Publication Date
CN112631621A true CN112631621A (zh) 2021-04-09

Family

ID=75286259

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011593372.1A Pending CN112631621A (zh) 2020-12-29 2020-12-29 一种依赖包管理方法、装置、服务器及存储介质

Country Status (1)

Country Link
CN (1) CN112631621A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116028108A (zh) * 2023-03-31 2023-04-28 深圳复临科技有限公司 一种依赖包安装用时分析方法、装置、设备及存储介质

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103595770A (zh) * 2013-10-29 2014-02-19 北京奇虎科技有限公司 Sdk实现文件下载的方法与装置
CN104182416A (zh) * 2013-05-27 2014-12-03 鸿富锦精密工业(深圳)有限公司 文件下载系统及方法
US20180081661A1 (en) * 2016-09-16 2018-03-22 Microsoft Technology Licensing, Llc Optimization for Multi-Project Package Manager
CN110278247A (zh) * 2019-05-24 2019-09-24 深圳壹账通智能科技有限公司 大批量文件下载方法及装置、存储介质、电子设备
CN111314437A (zh) * 2020-01-20 2020-06-19 腾讯科技(深圳)有限公司 资源包的下载方法和装置、存储介质及电子装置
CN112003893A (zh) * 2020-07-17 2020-11-27 北京达佳互联信息技术有限公司 一种资源下载方法和装置

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104182416A (zh) * 2013-05-27 2014-12-03 鸿富锦精密工业(深圳)有限公司 文件下载系统及方法
CN103595770A (zh) * 2013-10-29 2014-02-19 北京奇虎科技有限公司 Sdk实现文件下载的方法与装置
US20180081661A1 (en) * 2016-09-16 2018-03-22 Microsoft Technology Licensing, Llc Optimization for Multi-Project Package Manager
CN110278247A (zh) * 2019-05-24 2019-09-24 深圳壹账通智能科技有限公司 大批量文件下载方法及装置、存储介质、电子设备
CN111314437A (zh) * 2020-01-20 2020-06-19 腾讯科技(深圳)有限公司 资源包的下载方法和装置、存储介质及电子装置
CN112003893A (zh) * 2020-07-17 2020-11-27 北京达佳互联信息技术有限公司 一种资源下载方法和装置

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116028108A (zh) * 2023-03-31 2023-04-28 深圳复临科技有限公司 一种依赖包安装用时分析方法、装置、设备及存储介质
CN116028108B (zh) * 2023-03-31 2023-06-06 深圳复临科技有限公司 一种依赖包安装用时分析方法、装置、设备及存储介质

Similar Documents

Publication Publication Date Title
US10437703B2 (en) Correlation of source code with system dump information
US7516166B2 (en) Resource loading
US9250889B2 (en) Assigning severity to a software update
CN108762825B (zh) 动态库重载的实现方法及系统
US8799716B2 (en) Heap dump occurrence detection
CN110659210A (zh) 一种信息获取方法、装置、电子设备及存储介质
US10013249B2 (en) Identifying user managed software modules
CN114003269A (zh) 组件处理方法、装置、电子设备及存储介质
CN113760306A (zh) 安装软件的方法、装置、电子设备及存储介质
CN112631621A (zh) 一种依赖包管理方法、装置、服务器及存储介质
US8682944B2 (en) File system location verification using a sentinel
CN115080114B (zh) 应用程序的移植处理方法、装置和介质
US10733065B2 (en) Recovery of local resource
CN111427588A (zh) 中止固件包的安装
CN112486517B (zh) 应用程序的安装方法、系统、电子设备及存储介质
CN112114811A (zh) 一种编译方法、装置和设备
CN115421785B (zh) 应用程序的移植处理方法、装置和介质
US10884763B2 (en) Loading new code in the initial program load path to reduce system restarts
CN115454827B (zh) 兼容性检测方法、系统、设备和介质
CN109976765B (zh) 一种应用群部署方法、装置、设备和存储介质
US20240037017A1 (en) Verification of core file debugging resources
CN116954671A (zh) 私有云软件升级方法、设备及计算机可读介质
CN113590228A (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