簡體   English   中英

通過軟鏈接減小node_modules文件夾的大小

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM