批量下载npm离线安装包

上篇讲到如何下载npm离线安装包的几种思路
https://blog.csdn.net/xinle0320/article/details/124285708

1、批量下载npm离线安装包

三种方式

  • 通过 package.json 的 _resolved属性链接下载
  • 通过 package-lock.json 的 resolved属性链接下载
  • 本地直接打包方式

1.1分享使用属性链接方式下载,实现批量下载功能

如有疑问欢迎留言,废话不多说直接贴代码

# -*-coding:utf-8-*-
import json
import os
from pathlib import Path
from urllib.request import urlretrievedef node_modules(file_dir):"""  通过递归遍历 node_modules 每个子包的package.json 解析下载链接 """links = []for root, dirs, files in os.walk(file_dir):if 'package.json' in files:package_json_file = os.path.join(root, 'package.json')try:with open(package_json_file, 'r', encoding='UTF-8') as load_f:load_dict = json.load(load_f)# print(load_dict)if '_resolved' in load_dict.keys():links.append(load_dict['_resolved'])except Exception as e:print(package_json_file)print('Error:', e)return linksdef package_lock(package_lock_path):""" 通过递归遍历 package-lock.json 解析下载链接 """links = []with open(package_lock_path, 'r', encoding='UTF-8') as load_f:load_dict = json.load(load_f)# print(load_dict)search(load_dict, "resolved", links)return linksdef yarn_lock(package_lock_path):""" 通过递归遍历 xxx-yarn.lock 解析下载链接 """links = []with open(package_lock_path, 'r', encoding='UTF-8') as load_f:for line in load_f:if line.find('resolved') >= 0:line = line.replace('resolved', '')url = line.strip().strip('"')links.append(url)return linksdef search(json_object, key, links):"""  遍历查找指定的key   """for k in json_object:if k == key:links.append(json_object[k])if isinstance(json_object[k], dict):search(json_object[k], key, links)if isinstance(json_object[k], list):for item in json_object[k]:if isinstance(item, dict):search(item, key, links)def download_file(path, store_path):""" 根据下载链接下载  """# 判断输出的目录是否存在if store_path is None:store_path = 'D:\\nodejs'if not Path(store_path).exists():os.makedirs(store_path, int('0755'))links = []if path.endswith("package-lock.json"):links = package_lock(path)elif path.endswith("yarn.lock"):links = yarn_lock(path)else:links = node_modules(path)print("links:" + str(len(links)))# print(links)for url in links:try:filename = url.split('/')[-1]index = filename.find('?')if index > 0:filename = filename[:index]index = filename.find('#')if index > 0:filename = filename[:index]filepath = os.path.join(store_path, filename)if not Path(filepath).exists():print("down:" + url)urlretrieve(url, filepath)# else:#     print("file already exists:", filename)except Exception as e:print('Error Url:' + url)print('Error:', e)if __name__ == '__main__':# down_link = "C:\\Users\\Administrator\AppData\Roaming\\npm\\node_modules"# down_link = "D:\\Git\\vue\\1\package-yarn.lock"# down_link = "D:\\Git\\vue\\node_modules"down_link = "D:\\Git\\vue\\package-lock.json"download_file(down_link,"D:\\nodejs")print("ok")

批量下载npm离线安装包相关推荐

  1. 如何下载npm离线安装包

    如何下载npm离线安装包 如何将本地nodejs库,放入到nexus的npm库 在代码工程目录使用 npm install 安装 package.json 所依赖的文件,并依赖下载到 node_mod ...

  2. 如何下载flash离线安装包

    如何下载flash离线安装包 CreateTime--2018年4月14日16:02:13 Author:Marydon 1.下载地址 UpdateTime--2018年5月13日16点55分 ppa ...

  3. 离线安装nginx(包括离线安装gcc-g++环境,免费下载gcc离线安装包)

    离线安装nginx(包括离线安装gcc-g++环境) 有些时候我们的linux服务器无法连接公网的情况下就需要离线安装应用 检查电脑是否有gcc和gcc-c++环境 gcc -v g++ -v # 如 ...

  4. appinventor离线版下载_Chrome 离线安装包下载

    从 chrome 官网下载 chrome 浏览器,一般都是先下载一个安装器,然后打开安装器再下载安装包进行安装,安装过程需要联网. 下面这几个连接可以直接下载完整安装包,直接打开,离线安装. 最新稳定 ...

  5. linux如何下载rpm离线安装包到本机

    目的是下载rpm安装包,用于离线安装到其他机器上,两台机器的操作如下: 1.下载rpm包(这步在可以上网的Linux机器上操作): 1.1.确保本机linux可以联网: 1.2.执行指令,其中&quo ...

  6. 下载rpm离线安装包

    离线安装rpm包 yum 离线源制作方法 好多公司的服务器为了安全起见没有办法:连接外网,如果有没有yum源的话 ,我们可以自制一个yum源拷进去进行安装. 一.下载离线包rpm 在有网络的电脑上将依 ...

  7. 从微软官网下载VS离线安装包的方法VS2017,VS2019

    这里描述是包括所有版本,截图以下载VS2017社区版为例: ①登入VS官网下载页面,选择需要的版本点击下载,下载页点此进入. ②下载完成后,打开下载文件所在文件夹,Windows 8.1及以上版本用户 ...

  8. 下载 DropBox 离线安装包的方法

    在我的电脑 FQ 后, 去到 Dropbox 官网下载的时候. 始终都下下载不下来. 不知道是网络原因, 还是什么原因. 使用 IDM 也没有下载下来. 在下载的时候回出现如下的状态: 现在我们只需要 ...

  9. vs2019 中文离线安装包下载,类似ISO

    1. 通过在https://visualstudio.microsoft.com/zh-hans/downloads/ 下载VS2019, 之后会下载vs_enterprise__78682482.1 ...

  10. vs2019 中文离线安装包下载

    1. 通过在https://visualstudio.microsoft.com/zh-hans/downloads/ 下载VS2019, 之后会下载vs_enterprise__78682482.1 ...

最新文章

  1. java xml 查询_Java DOM解析器 - 查询XML文档
  2. 新版ffmpeg PCM编码到AAC,swr_convert转换采样精度,稍微修改兼容PCM编码为G711A及MP3,记录下。
  3. Python常用模块之sys模块
  4. c语言中1B是多少,C语言1、C语言中,运算对象必须是整型的运算符是【】A./B-查字典问答网...
  5. Pyechart:30分钟学会pyecharts数据可视化
  6. python如何将多张excel表内数据求和_Excel批量操作,把你的工作效率提升10倍以上(1)...
  7. Xcode中c语言读键盘,使用Objective-C自定义键盘-Xcode8
  8. Windows安全不能靠本地管理员权限
  9. phpstudy打开浏览php页面发现显示源码解决方法
  10. 微软word 2019取消交叉引用
  11. 自定义图标iconfont
  12. Java开发报表——Grid++Report 报表设计器
  13. 【转帖】PSP ISO文件LBA保护分析 by Elysion
  14. 关于core_cm3.c和core_cm3.h,Core_cmFunc.h 和 Core_cmInstr.h的理解
  15. php户型图识别,五大指标教你看懂户型图
  16. 一、微信小程序-快速回顾(创建项目、项目结构分析)
  17. MySQL进阶:触发器
  18. android陀螺仪惯导手机gps,推荐基于陀螺仪惯性导航的智能停车定位导航解决方案...
  19. 华硕天选无法识别蓝牙
  20. 阿伟教学--VMWare装Mac

热门文章

  1. 【自然语言处理】【实体匹配】PromptEM:用于低资源广义实体匹配的Prompt-tuning
  2. 解决chm文件打开后跳到某一主页方法
  3. 索尼 swiftkey_iOS8 3rd Party键盘的评测-SwiftKey和Swype
  4. python和c 情侣网名_qq情侣网名个性网
  5. 离散时间信号,连续时间信号,模拟信号,数字信号区别
  6. 小组取什么名字好_给小组取个好名字
  7. JQuery设置网页全屏代码实现
  8. 无线局域网WLAN的入门概念
  9. 基于vmdk文件创建虚拟机
  10. lighttpd使用