{"_id":"@343dev/harold","_rev":"3-a6124daad7837ab4d65039f8c7fef626","name":"@343dev/harold","dist-tags":{"latest":"4.0.3"},"versions":{"3.0.0":{"name":"@343dev/harold","version":"3.0.0","keywords":["front-end","bundle","analyzer","comparison"],"author":{"url":"https://github.com/343dev","name":"Andrey Warkentin"},"license":"MIT","_id":"@343dev/harold@3.0.0","maintainers":[{"name":"343dev","email":"343dev@gmail.com"}],"homepage":"https://github.com/343dev/harold#readme","bugs":{"url":"https://github.com/343dev/harold/issues"},"bin":{"harold":"index.js"},"dist":{"shasum":"def950ff2e167ff975dfb2892a39f0b7912795ed","tarball":"https://registry.npmjs.org/@343dev/harold/-/harold-3.0.0.tgz","fileCount":18,"integrity":"sha512-PMtI5Y86MMsukg2QZhUO0em5sz91Q0MegweE0/W0ZThlcSLzHoGUhEA2bRDBMzIRh6uVd7m5zvqf5TnFj3n3IA==","signatures":[{"sig":"MEQCIBly6s8xJGyc7zp9dZxK1sLpdtM+EV6wFI1BqtlppztqAiAF4YOn19OQPvrLB4e52upiL8BYb4Z15CVevWMZLGy14g==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38416},"type":"module","engines":{"node":">=16.14"},"exports":"./index.js","gitHead":"20220ff0cb4469f76501b2ee00445fda69388e9b","scripts":{"lint":"eslint .","test":"echo \"Error: no test specified\" && exit 1","update-git-hooks":"npx simple-git-hooks"},"_npmUser":{"name":"343dev","email":"343dev@gmail.com"},"repository":{"url":"git+https://github.com/343dev/harold.git","type":"git"},"_npmVersion":"9.5.0","description":"Project bundle comparison tool","directories":{},"lint-staged":{"*.js":"eslint --fix"},"_nodeVersion":"18.15.0","dependencies":{"ora":"^7.0.1","commander":"^11.0.0","fast-glob":"^3.3.1","gzip-size":"^7.0.0","cli-table3":"^0.6.3","signal-exit":"^4.1.0","pretty-bytes":"^6.1.1"},"eslintConfig":{"rules":{"unicorn/no-array-reduce":0},"extends":"plugin:unicorn/recommended","plugins":["import"]},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^8.48.0","lint-staged":"^14.0.1","simple-git-hooks":"^2.9.0","eslint-plugin-import":"^2.28.1","eslint-plugin-unicorn":"^48.0.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/harold_3.0.0_1693302721310_0.31728560033531505","host":"s3://npm-registry-packages"}},"4.0.0":{"name":"@343dev/harold","version":"4.0.0","keywords":["front-end","bundle","analyzer","comparison"],"author":{"url":"https://github.com/343dev","name":"Andrey Warkentin"},"license":"MIT","_id":"@343dev/harold@4.0.0","maintainers":[{"name":"343dev","email":"cccode@duck.com"}],"homepage":"https://github.com/343dev/harold#readme","bugs":{"url":"https://github.com/343dev/harold/issues"},"bin":{"harold":"index.js"},"dist":{"shasum":"5516848ab8095eaf99bce04790293c06e021acde","tarball":"https://registry.npmjs.org/@343dev/harold/-/harold-4.0.0.tgz","fileCount":20,"integrity":"sha512-8ACISd13y/T0xhk0h8Cnyp5SWMrChMUD1zLVp76kI5g6KvabHP2XeXKFJzjw1nTWMBERNrgu1bd8knbrG7XJYQ==","signatures":[{"sig":"MEQCIFu6nHG70RKItP9NNGKlEu+IhoScBLBbq5c+SGojQbHQAiAqkw2p1v8AmAYUZjMZBsH34MQpMlkrKpJhSYXkxkIBbQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38761},"type":"module","engines":{"node":">=18.12"},"exports":"./index.js","gitHead":"a399fc2eb9d3a5afc4c99a55cd0a1c6bc2b5ebb6","scripts":{"lint":"eslint .","test":"echo \"Error: no test specified\" && exit 1","update-git-hooks":"npx simple-git-hooks"},"_npmUser":{"name":"343dev","email":"cccode@duck.com"},"repository":{"url":"git+https://github.com/343dev/harold.git","type":"git"},"_npmVersion":"10.2.4","description":"Project bundle comparison tool","directories":{},"lint-staged":{"*.js":"eslint --fix"},"_nodeVersion":"20.11.1","dependencies":{"commander":"^12.0.0","fast-glob":"^3.3.2","gzip-size":"^7.0.0","cli-table3":"^0.6.3","nanospinner":"^1.1.0","signal-exit":"^4.1.0","pretty-bytes":"^6.1.1"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^8.56.0","lint-staged":"^15.2.2","simple-git-hooks":"^2.9.0","eslint-plugin-unicorn":"^51.0.1"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/harold_4.0.0_1708620961843_0.8339346352720238","host":"s3://npm-registry-packages"}},"4.0.2":{"name":"@343dev/harold","version":"4.0.2","keywords":["front-end","bundle","analyzer","comparison"],"author":{"url":"https://github.com/343dev","name":"Andrey Warkentin"},"license":"MIT","_id":"@343dev/harold@4.0.2","maintainers":[{"name":"343dev","email":"343dev@gmail.com"}],"homepage":"https://github.com/343dev/harold#readme","bugs":{"url":"https://github.com/343dev/harold/issues"},"bin":{"harold":"index.js"},"dist":{"shasum":"24e5ce65e07c951067d01080cbcad23ca7f10a6b","tarball":"https://registry.npmjs.org/@343dev/harold/-/harold-4.0.2.tgz","fileCount":20,"integrity":"sha512-cbcAzP82wkVTZLDxZiuDtccEEvi1BXcgxvt0uu1ze1ns0rUa9A184YXFedcaCFEvK/GX4gDvPzYZioTY5CY8dQ==","signatures":[{"sig":"MEUCIQD9A7JY2IWF+z3k3BCrghkoTQbvrMvzAYWi3ygP8biEGwIgdPDQGgZ9pm4L8CzYcfbmBpRZZNL7CMOITIM4Sns0tZk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38008},"type":"module","engines":{"node":">=18.12"},"exports":"./index.js","gitHead":"d230632d088483221470e752ba6cf733d97c326a","scripts":{"lint":"eslint .","test":"echo \"Error: no test specified\" && exit 1","update-git-hooks":"npx simple-git-hooks"},"_npmUser":{"name":"343dev","email":"343dev@gmail.com"},"repository":{"url":"git+https://github.com/343dev/harold.git","type":"git"},"_npmVersion":"10.5.0","description":"Project bundle comparison tool","directories":{},"lint-staged":{"*.js":"eslint --fix"},"_nodeVersion":"20.12.2","dependencies":{"commander":"^12.0.0","fast-glob":"^3.3.2","gzip-size":"^7.0.0","cli-table3":"^0.6.5","nanospinner":"^1.1.0","signal-exit":"^4.1.0","pretty-bytes":"^6.1.1"},"eslintConfig":{"extends":"@343dev"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^8.57.0","lint-staged":"^15.2.8","simple-git-hooks":"^2.11.1","@343dev/eslint-config":"^1.0.0"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"_npmOperationalInternal":{"tmp":"tmp/harold_4.0.2_1723013716638_0.8099240513584138","host":"s3://npm-registry-packages"}},"4.0.3":{"name":"@343dev/harold","version":"4.0.3","description":"Project bundle comparison tool","keywords":["front-end","bundle","analyzer","comparison"],"license":"MIT","author":{"name":"Andrey Warkentin","url":"https://github.com/343dev"},"repository":{"type":"git","url":"git+https://github.com/343dev/harold.git"},"bin":{"harold":"index.js"},"type":"module","exports":"./index.js","scripts":{"lint":"eslint .","test":"echo \"Error: no test specified\" && exit 1","update-git-hooks":"npx simple-git-hooks"},"engines":{"node":">=18.12"},"dependencies":{"cli-table3":"^0.6.5","commander":"^12.0.0","fast-glob":"^3.3.2","gzip-size":"^7.0.0","nanospinner":"^1.1.0","pretty-bytes":"^6.1.1","signal-exit":"^4.1.0"},"devDependencies":{"@343dev/eslint-config":"^1.0.0","eslint":"^8.57.0","lint-staged":"^15.2.8","simple-git-hooks":"^2.11.1"},"lint-staged":{"*.js":"eslint --fix"},"simple-git-hooks":{"pre-commit":"npx lint-staged"},"eslintConfig":{"extends":"@343dev"},"_id":"@343dev/harold@4.0.3","gitHead":"ee30f1e4d9de3e8cb5f7f995ece5ab997f0789ff","bugs":{"url":"https://github.com/343dev/harold/issues"},"homepage":"https://github.com/343dev/harold#readme","_nodeVersion":"20.17.0","_npmVersion":"10.8.2","dist":{"integrity":"sha512-Tpi/PLvEkTQYNS33iNfcRMvImc3ykXi/iNdZf7inUbmqPZ9wd4C6f6xzkGQrJqHFwxU6nXx/Arj9+oQECX7KZg==","shasum":"953e10a0e5b43638b14ccf32b73802bf330658db","tarball":"https://registry.npmjs.org/@343dev/harold/-/harold-4.0.3.tgz","fileCount":21,"unpackedSize":38579,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCge7kHsvalubPo6HnQPUik1H9pP16VwXG+X9n8QBQq+QIgXykEaX9puXNkXFpl8agtefI8+2zGgHPhV4Uh7uaZE14="}]},"_npmUser":{"name":"343dev","email":"343dev@gmail.com"},"directories":{},"maintainers":[{"name":"343dev","email":"343dev@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/harold_4.0.3_1729078998961_0.8490431971250907"},"_hasShrinkwrap":false}},"time":{"created":"2023-08-29T09:52:01.213Z","modified":"2024-10-16T11:43:19.326Z","3.0.0":"2023-08-29T09:52:01.504Z","4.0.0":"2024-02-22T16:56:02.086Z","4.0.2":"2024-08-07T06:55:16.785Z","4.0.3":"2024-10-16T11:43:19.155Z"},"bugs":{"url":"https://github.com/343dev/harold/issues"},"author":{"name":"Andrey Warkentin","url":"https://github.com/343dev"},"license":"MIT","homepage":"https://github.com/343dev/harold#readme","keywords":["front-end","bundle","analyzer","comparison"],"repository":{"type":"git","url":"git+https://github.com/343dev/harold.git"},"description":"Project bundle comparison tool","maintainers":[{"name":"343dev","email":"343dev@gmail.com"}],"readme":"# @343dev/harold\n\n<img align=\"right\" width=\"192\" height=\"192\"\n     alt=\"Аватар: грустный эмоджи в маске с улыбкой\"\n     src=\"./logo.png\">\n\n[![npm](https://img.shields.io/npm/v/@343dev/harold.svg)](https://www.npmjs.com/package/@343dev/harold)\n\n**Harold** — CLI-утилита для сравнения размеров сборок фронтенд-проекта.\n\n## Мотивация\n\nРазмер бандла среднестатистического фронтенд-проекта растёт с каждым изменением.\n\nЧтобы ~~прочувствовать боль~~ облегчить сравнение размеров до и после рефакторинга, обновления зависимостей\nили каких-то масштабных правок, мы создали Гарольда.\n\n## Демо\n\n<img align=\"center\"\n     alt=\"Демо GIF\"\n     src=\"./demo.gif\">\n\n<small><i>Демо ускорено в несколько десятков раз. В реальной жизни установка зависимостей и сборка проекта занимают\nпримерно вечность.</i></small>\n\n## Установка\n\n```bash\nnpm install -g @343dev/harold\n```\n\n## Команды\n\n### snapshot \\[options\\]\n\nСобирает проект, и создаёт слепок сборки.\n\nДоступные флаги:\n\n- `-c, --config <path>` — указывает путь до файла конфигурации, переопределяет [конфиг по умолчанию](./.haroldrc.js);\n- `-o, --output <path>` — указывает путь, по которому нужно сохранить слепок; по умолчанию `harold_snapshot_<date>_<time>.json`;\n- `-e, --exec <cmd>` — указывает команду для сборки проекта; по умолчанию `npm run build-production`;\n- `-p, --path <path>` — указывает путь до результирующей директории сборки, слепок которой будет сделан; по умолчанию `public`.\n\n### diff \\<left\\> \\<right\\>\n\nСравнивает указанные слепки.\n\n### help\n\nВыводит справку по командам.\n\n## Конфигурация\n\nНастройки по умолчанию расположены в [.haroldrc.js](./.haroldrc.js), файл содержит список поддерживаемых\nпараметров и их краткое описание.\n\nПри запуске с флагом `--config path/to/.haroldrc.js` будут использоваться настройки из указанного конфигурационного файла.\n\nПри обычном запуске, без флага `--config`, будет произведён рекурсивный поиск файла `.haroldrc.js` начиная\nс текущей директории и до корня файловой системы. Если файл не найден, то будут применены настройки по умолчанию.\n\n## FAQ\n\n### Как оно работает?\n\nПри вызове `harold snapshot` Гарольд запускает сборку проекта, ждёт пока она закончится, после этого идёт в папку\nс файлами бандла и записывает размер каждого из них. По пути он ещё и создаёт gzip-версию каждого файла, и записывает\nи его размер. После этого собирает всё это в кучу и сохраняет в JSON-файл.\n\nПри вызове `harold diff first.json second.json` он сравнивает переданные JSON-файлы и выводит общую статистику.\n\n<details>\n  <summary>Пример использования</summary>\n\n  ```bash\n  # Переходим в директорию проекта\n  $ cd ~/my-syper-kewl-project/\n\n  # Делаем слепок\n  $ harold snapshot -o before.json\n\n  # Как-то изменяем проект\n\n  # Делаем ещё слепок\n  $ harold snapshot -o after.json\n\n  # Сравниваем слепки\n  $ harold diff before.json after.json\n\n  Snapshots:\n   Left: 11/10/2020 6:30:56 PM • my-syper-kewl-project • master\n   Right: 11/10/2020 6:45:13 PM • my-syper-kewl-project • improvement/framework-update\n\n  Build time:\n   16 seconds slower (Left: 129 seconds, Right: 145 seconds)\n\n  Diff by category:\n   ————————————————————————————————————————————————————————————————————————————————————\n                  before              after               Changes\n   ————————————————————————————————————————————————————————————————————————————————————\n    CSS           144 kB (23.4 kB)    144 kB (23.4 kB)    No changes\n   ————————————————————————————————————————————————————————————————————————————————————\n    JavaScript    1.04 MB (270 kB)    1.12 MB (294 kB)    +78.2 kB (+23.7 kB), +1 item\n   ————————————————————————————————————————————————————————————————————————————————————\n    Images        5.26 MB (5.23 MB)   5.26 MB (5.23 MB)   No changes\n   ————————————————————————————————————————————————————————————————————————————————————\n    Fonts         159 kB (159 kB)     159 kB (159 kB)     No changes\n   ————————————————————————————————————————————————————————————————————————————————————\n    Other         127 kB (13.2 kB)    127 kB (13.3 kB)    +364 B (+82 B)\n   ————————————————————————————————————————————————————————————————————————————————————\n\n    Total         9.4 MB (7.56 MB)    9.57 MB (7.61 MB)   +169 kB (+52.4 kB), +2 items\n   ————————————————————————————————————————————————————————————————————————————————————\n\n  Diff by files:\n   m public: +169 kB (+52.4 kB)\n   m public/10.js: +16 B (+4 B)\n   m public/11.js: -20 B (-3 B)\n   + public/12.js: 301 B (143 B)\n   m public/3.js: +1.84 kB (+621 B)\n   m public/app.js: +4.18 kB (+843 B)\n   m public/legacy.10.js: +42 B (+18 B)\n   + public/legacy.12.js: 513 B (148 B)\n   m public/legacy.3.js: +1.9 kB (+634 B)\n   m public/legacy.app.js: +6.83 kB (+1 kB)\n   m public/legacy.vendor.js: +81.3 kB (+26.8 kB)\n   m public/legacy.vendor.js.LICENSE: +182 B (+41 B)\n   m public/vendor.js: +72.2 kB (+22.1 kB)\n   m public/vendor.js.LICENSE: +182 B (+41 B)\n  ```\n</details>\n\n### Как быть с хэшами в именах файлов?\n\nСовременные бандлеры умеют добавлять в имена файлов хэши, чтобы улучшать их кэширование. Однако, Гарольд сравнивает\nфайлы основываясь на их имени. Чтобы улучшить качество пофайлового сравнения, стоит настроить бандлер таким образом,\nчтобы он отключал добавление хэшей, если указана переменная окружения, например `NO_HASH`.\n\n### Как снять слепок без сборки проекта?\n\nПередайте в `--exec` какую-нибудь бесполезную команду, вроде `echo`.\n\n## Благодарности\n\nАватар для репозитория нарисовал [Игорь Гарибальди](http://pandabanda.com/).\n","readmeFilename":"README.ru.md"}