Команда для простого и легкого получения объяснений с помощью Gemini CLI
Привет, я некомпетентен.
Давно не виделись. Я копил энергию. Шучу, я просто ленился. Извините.
Итак, это небольшая новость, но вышел Gemini CLI, что является радостью для пользователей CLI.
Я просто добавил это в свой .bashrc.
ghelp() {
(echo "Объясни это" ; cat $1 ) | gemini
}
В этом нет ничего особенного, но теперь стало проще, потому что мне больше не нужно делать лишний шаг через браузер, чтобы LLM объяснял код.
Например, с этим:
[curljs]
thepassenger:[haturatu]:~/git/curljs$ ghelp curl.js
Этот код представляет собой скрипт Node.js, который использует библиотеку [Puppeteer](https://pptr.dev/) для получения содержимого указанной веб-страницы.
Ниже объясняется, что делает каждая часть кода.
1. **`const puppeteer = require('puppeteer');`**
* Загружает библиотеку Puppeteer. Эта библиотека используется для программного управления браузерами Chrome или Chromium.
2. **`(async () => { ... })();`**
* Это «немедленно вызываемая асинхронная функция». Заключая весь код в асинхронную функцию, мы можем использовать ключевое слово `await` внутри нее. `await` необходим для ожидания завершения длительных процессов (таких как запуск браузера или загрузка страницы).
3. **`const url = process.argv[2];`**
* Сохраняет третий аргумент, переданный из командной строки, в переменную `url`.
* Пример: Если выполнить `node script.js https://example.com`, `process.argv[2]` будет содержать `https://example.com`.
4. **`if (!url) { ... }`**
* Если URL не указан, выводит сообщение об ошибке и аварийно завершает скрипт с помощью `process.exit(1)`.
5. **`const browser = await puppeteer.launch({ headless: true });`**
* Запускает новый экземпляр браузера.
* `headless: true` — это настройка для запуска браузера в фоновом режиме без отображения его пользовательского интерфейса (экрана). Если вы хотите визуально подтвердить поведение браузера, например, во время отладки, установите значение `false`.
6. **`const page = await browser.newPage();`**
* Открывает новую вкладку (страницу) в запущенном браузере.
7. **`await page.goto(url, { waitUntil: 'networkidle2' });`**
* Переходит по указанному URL.
* `waitUntil: 'networkidle2'` — важная опция для ожидания загрузки страницы. Она ожидает, пока количество сетевых подключений не упадет до 2 или менее, а затем в течение 500 миллисекунд не будет новых подключений. Это полезно для корректного отображения современных веб-сайтов (таких как SPA), которые динамически загружают контент с помощью JavaScript.
8. **`await new Promise(resolve => setTimeout(resolve, 5000));`**
* После завершения загрузки страницы ожидает еще 5 секунд.
* Это дополнительное время ожидания вставлено для ожидания анимаций, которые могут не завершиться только с `networkidle2`, или для контента, который появляется после определенных операций.
9. **`const html = await page.content();`**
* Получает полное HTML-содержимое страницы. Это включает в себя все HTML-элементы, динамически сгенерированные JavaScript.
10. **`console.log(html);`**
* Выводит полученный HTML в консоль.
11. **`await browser.close();`**
* Закрывает экземпляр браузера и освобождает ресурсы. Если забыть это сделать, процессы могут продолжать работать бесконечно.
### Итог
Этот скрипт выполняет процесс **«получения веб-страницы по URL, указанному в командной строке, в ее конечном состоянии после завершения выполнения JavaScript, и вывода ее HTML в стандартный вывод»**.
Это очень полезный метод, когда вы хотите получить информацию с динамически отображаемых веб-сайтов (таких как SPA), которую невозможно получить с помощью простого HTTP-запроса (например, для веб-скрейпинга).
Он выводит примерно так.
Ну, это все, что есть...