Команда для простого и легкого получения объяснений с помощью Gemini CLI

6 min

language: ja bn en es hi pt ru zh-cn zh-tw

Привет, я некомпетентен.
Давно не виделись. Я копил энергию. Шучу, я просто ленился. Извините.

Итак, это небольшая новость, но вышел 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-запроса (например, для веб-скрейпинга).

Он выводит примерно так.
Ну, это все, что есть...

Related Posts