HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>В JavaScript существует отдельный класс пакетов-программ, которые связаны с конкретными проектами. То есть они устанавливаются в проект, но запускаются как программы, а не импортируются в код как библиотека. В основном эти программы выполняют различные манипуляции с кодом, начиная от исправления ошибок, до различных преобразований исходного кода например с целью работы на более старых версиях интерпретатора или подготовки кода для работы в браузере.</p>
1 <p>В JavaScript существует отдельный класс пакетов-программ, которые связаны с конкретными проектами. То есть они устанавливаются в проект, но запускаются как программы, а не импортируются в код как библиотека. В основном эти программы выполняют различные манипуляции с кодом, начиная от исправления ошибок, до различных преобразований исходного кода например с целью работы на более старых версиях интерпретатора или подготовки кода для работы в браузере.</p>
2 <p>Одной из таких программ является<em>prettier</em>. Это очень популярный инструмент, автоматически форматирующий код по общепринятым правилам. С его помощью команды придерживаются единого стиля написания без необходимости запоминать эти правила. Посмотреть как работает<em>prettier</em>можно в<a>его песочнице в браузере</a>.</p>
2 <p>Одной из таких программ является<em>prettier</em>. Это очень популярный инструмент, автоматически форматирующий код по общепринятым правилам. С его помощью команды придерживаются единого стиля написания без необходимости запоминать эти правила. Посмотреть как работает<em>prettier</em>можно в<a>его песочнице в браузере</a>.</p>
3 <p>Пример кода до обработки:</p>
3 <p>Пример кода до обработки:</p>
4 <p>Этот же код после автоматического форматирования:</p>
4 <p>Этот же код после автоматического форматирования:</p>
5 <p>Так как<em>prettier</em>это инструмент для написания кода, то он должен устанавливаться как<em>dev</em>зависимость:</p>
5 <p>Так как<em>prettier</em>это инструмент для написания кода, то он должен устанавливаться как<em>dev</em>зависимость:</p>
6 <p>Следующим шагом его нужно запустить как обычную консольную утилиту. По документации<em>prettier</em>видно, что имя утилиты (имя исполняемого файла) совпадает с именем пакета. Попробуем выполнить запуск:</p>
6 <p>Следующим шагом его нужно запустить как обычную консольную утилиту. По документации<em>prettier</em>видно, что имя утилиты (имя исполняемого файла) совпадает с именем пакета. Попробуем выполнить запуск:</p>
7 <p>Если вы до этого не устанавливали<em>prettier</em>глобально, то запуск кода выше приведет к ошибке:<em>command not found: prettier</em>. Почему так происходит?</p>
7 <p>Если вы до этого не устанавливали<em>prettier</em>глобально, то запуск кода выше приведет к ошибке:<em>command not found: prettier</em>. Почему так происходит?</p>
8 <p>В отличие от глобальной установки, обычная (локальная) установка помещает содержимое пакета в директорию<em>node_modules</em>текущего проекта. Командные оболочки, например Bash, при запуске утилит ищут их в специальных системных директориях, но они ничего не знают про утилиты, установленные в другие места системы, например, в наш проект. Поэтому для запуска нужно указывать полный путь до файла программы.</p>
8 <p>В отличие от глобальной установки, обычная (локальная) установка помещает содержимое пакета в директорию<em>node_modules</em>текущего проекта. Командные оболочки, например Bash, при запуске утилит ищут их в специальных системных директориях, но они ничего не знают про утилиты, установленные в другие места системы, например, в наш проект. Поэтому для запуска нужно указывать полный путь до файла программы.</p>
9 <p>Программы устанавливающиеся локально, хранят свои исполняемые файлы в директории<em>node_modules/.bin</em>. Поэтому запуск нужно выполнять там:</p>
9 <p>Программы устанавливающиеся локально, хранят свои исполняемые файлы в директории<em>node_modules/.bin</em>. Поэтому запуск нужно выполнять там:</p>
10 <p>У такого запуска есть два неудобства:</p>
10 <p>У такого запуска есть два неудобства:</p>
11 <ol><li>Слишком долго набирать</li>
11 <ol><li>Слишком долго набирать</li>
12 <li>Идет завязка на конкретную структуру директорий, которая может поменяться</li>
12 <li>Идет завязка на конкретную структуру директорий, которая может поменяться</li>
13 </ol><p>Для упрощения запуска Node.js поставляется вместе с еще одной утилитой -<em>npx</em>. Она помогает запускать программы установленные локально без необходимости указывать полный путь до исполняемого файла:</p>
13 </ol><p>Для упрощения запуска Node.js поставляется вместе с еще одной утилитой -<em>npx</em>. Она помогает запускать программы установленные локально без необходимости указывать полный путь до исполняемого файла:</p>
14 <p><em>npx</em>анализирует директорию<em>node_modules/.bin</em>и если находит там нужный файл, то подставляет его. Если пакет с таким именем не был установлен, то<em>npx</em>предлагает его установить.</p>
14 <p><em>npx</em>анализирует директорию<em>node_modules/.bin</em>и если находит там нужный файл, то подставляет его. Если пакет с таким именем не был установлен, то<em>npx</em>предлагает его установить.</p>
15 <p>Как вы увидите дальше, в реальных проектах на JavaScript пакетов-утилит достаточно много. Вот лишь некоторые популярные: Babel, Webpack, Eslint, Gulp. Все это часть экосистемы, с которой сталкиваются все веб разработчики на JavaScript. И для запуска всех этих утилит нужен<em>npx</em>.</p>
15 <p>Как вы увидите дальше, в реальных проектах на JavaScript пакетов-утилит достаточно много. Вот лишь некоторые популярные: Babel, Webpack, Eslint, Gulp. Все это часть экосистемы, с которой сталкиваются все веб разработчики на JavaScript. И для запуска всех этих утилит нужен<em>npx</em>.</p>
16 <h2>Глобальная установка vs Локальная</h2>
16 <h2>Глобальная установка vs Локальная</h2>
17 <p>Prettier можно установить и глобально и локально. В обоих случаях он будет работать. Но лучше всегда подобные пакеты ставить локально. Почему? Локальные зависимости общие. Любой, кто разрабатывает наш проект, автоматически получает все зависимости. Если же<em>prettier</em>установлен глобально, то каждому разработчику придется самостоятельно заботиться о его установке. Вторая проблема связана с версией. У разных разработчиков в конце концов могут оказаться (и окажутся) разные версии<em>prettier</em>, которые могут работать по-разному, что будет приводить к разным результатам или даже ошибкам.</p>
17 <p>Prettier можно установить и глобально и локально. В обоих случаях он будет работать. Но лучше всегда подобные пакеты ставить локально. Почему? Локальные зависимости общие. Любой, кто разрабатывает наш проект, автоматически получает все зависимости. Если же<em>prettier</em>установлен глобально, то каждому разработчику придется самостоятельно заботиться о его установке. Вторая проблема связана с версией. У разных разработчиков в конце концов могут оказаться (и окажутся) разные версии<em>prettier</em>, которые могут работать по-разному, что будет приводить к разным результатам или даже ошибкам.</p>