diff --git a/download-npm.py b/download-npm.py new file mode 100644 index 0000000..c7fafc1 --- /dev/null +++ b/download-npm.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +''' +Author: Alvis Zhao +Date: 2020-08-04 12:15:30 +LastEditTime: 2020-08-14 11:43:39 +Description: 解析package-lock.json下载npm缓存包 +''' + +import os +import json +import urllib.request + +dependencyDict = {} + +def analyzeDependency(dependencies): + for key in dependencies: + dependenciesInfo = dependencies[key] + + if "resolved" in dependenciesInfo: + url = dependenciesInfo["resolved"] + version = dependenciesInfo["version"] + # 存入字典去重 + dependencyDict[key + "-" + version] = url + + if "dependencies" in dependenciesInfo: + childDependencies = dependenciesInfo["dependencies"] + analyzeDependency(childDependencies) + +output = "offline-packages" + +if not os.path.exists(output): + os.mkdir(output) + +f = open('package-lock.json', 'r') +content = f.read() +contentDict = json.loads(content) +dependencies = contentDict["dependencies"] +# 分析并保存依赖 +analyzeDependency(dependencies) + +# 按照key排序下载 +sortedKeys = sorted(dependencyDict) +for key in sortedKeys: + url = dependencyDict[key] + params = url.split("?")[0].split("/") + filename = params[len(params) -1] + outputFile = output + os.sep + filename + print("downloading " + " " + key + " " + url) + if not os.path.isfile(outputFile): + urllib.request.urlretrieve(url, outputFile) + +f.close()