[英]Reduce size of node_modules folder by soft linking
我注意到运行find node_modules -path '*/lodash'
,很多程序包都包含lodash,通过查看package.json,它甚至是完全相同的版本。
因为lodash很重(4.5MB),所以如果它们全部共享完全相同的内存分配(通过使用符号链接),那么我仅通过将lodash模块链接在一起,就应该能够将node_modules文件夹的大小至少减少20MB。 。
一个好的脚本应该能够找到更多的程序包,而不是简单的lodash,并且可能节省更多的空间。
有谁知道能够做到这一点的脚本/模块? 还是我自己实现?
当然,您没有检查它们是否具有相同的版本,对吗? 在每个npm软件包中,package.json文件中都有特定的版本或“ *”。 我没有检查,但是我确定npm正确处理了它。
谷歌快速结果 -这可以帮助您确定。
我使用以下自定义脚本解决了该问题:
import json
from itertools import groupby
from pprint import pprint
import os
import subprocess
allPackages = subprocess.check_output("find node_modules/ -name 'package.json'", shell=True).splitlines()
# Collect all modules
allModules = {}
for filePath in allPackages:
with open(filePath.strip()) as data_file:
data = json.load(data_file)
packageKey = data['name'] + data['version']
if packageKey not in allModules:
allModules[packageKey] = list()
allModules[packageKey].append(os.path.dirname(filePath))
# Remove not duplicated ones
for packageKey, paths in allModules.items():
if (len(paths) > 1):
original = allModules[packageKey].pop()
for module in allModules[packageKey]:
originalRelativeToModule = os.path.relpath(original,os.path.dirname(module))
print('delete folder ', module, 'and symlink to ', originalRelativeToModule)
print(subprocess.check_call(["rm","-rf",module]))
print(subprocess.check_call(["ln","-s",originalRelativeToModule,module]))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.