How to effectively command NPM wombats as «seller»
We have gone through how to wield the NPM CLI tool as a consumer, but what about effectively using it as an author (and potentially becoming a JavaScript open source wizard ?)?
npm publish
Sending a package to our npmjs.com fulfillment centre is super easy as we only need to run . The tricky part, which is not specific to npm package authors, is determining the version of the package.
The rule of thumb according to semver.org:
- MAJOR version when you make incompatible API changes,
- MINOR version when you add functionality in a backwards compatible manner, and
- PATCH version when you make backwards compatible bug fixes.
It’s even more important to follow the above rule when publishing your packages to ensure that you’re not breaking anyone’s code as the default version matching in npm is (aka the next minor version).
Step 4 — Installing Node.js
With Homebrew installed, you can install a wide range of software and developer tools. We’ll use it to install Node.js and its dependencies.
You can use Homebrew to search for everything you can install with the command, but to provide us with a shorter list, let’s instead search for packages related to Node.js:
You’ll see a list of packages you can install, like this:
Both of these packages install Node.js on your system. They both exist just in case you can’t remember if you need to use or .
Execute this command to install the package:
You’ll see output similar to the following in your Terminal. Homebrew will install many dependencies, but will eventually download and install Node.js itself:
In addition to Node.js itself, Homebrew installs a few related tools, including , which makes it easy to install and update Node.js libraries and packages you might use in your own projects.
To check the version of Node.js that you installed, type
This will output the specific version of Node.js that is currently installed, which will by default be the most up-to-date stable version of Node.js that is available.
Check the version of with
You’ll see the version displayed:
You’ll use to install additional components, libraries, and frameworks.
To update your version of Node.js, you can first update Homebrew to get the latest list of packages, and then upgrade Node.js itself:
Now that Node.js is installed, let’s write a program to ensure everything works.
3: Установка и настройка Homebrew
Хотя интерфейс командной строки в macOS обладает множеством функций, которые можно найти в Linux и других системах Unix, у него нет хорошего менеджера пакетов. Менеджер пакетов – это набор программных инструментов, которые автоматизируют установку, настройку и обновление программного обеспечения. Менеджер централизованно хранит программы, которые он устанавливает, и может поддерживать все пакеты программного обеспечения в системе в широко используемых форматах. Homebrew – это свободная и открытая система управления пакетами программного обеспечения, которая упрощает установку программ в macOS. Мы будем использовать Homebrew для установки самой последней версии Node.js.
Чтобы установить Homebrew, введите в терминал:
Команда использует curl для загрузки сценария установки Homebrew из Git-репозитория Homebrew на GitHub.
Давайте рассмотрим использованные флаги:
- Флаг -f (–fail) не выводит HTML-документ об ошибках сервера.
- Флаг -s (–silent) отключает индикатор выполнения, а в сочетании с флагом -S (–show-error) гарантирует вывод сообщения об ошибке в случае сбоя.
- Флаг -L (–location) обрабатывает перенаправления. Если сервер сообщает, что запрошенная страница перемещена в другое расположение, он автоматически повторит запрос с учетом новых данных.
После того как curl загрузит скрипт, его выполнит интерпретатор Ruby, который поставляется с macOS. Он запустит процесс установки Homebrew.
Скрипт установки объяснит, что он будет делать, и предложит вам подтвердить эти действия. Это позволяет вам узнать точно, что Homebrew собирается сделать с вашей системой, прежде чем вы позволите менеджеру продолжить работу. Это также гарантирует, что вы выполнили все условия, необходимые для продолжения работы.
Вам будет предложено ввести пароль. Однако при вводе пароля при нажатии клавиш в окне терминала ничего не отображается. Это мера безопасности, которую часто применяется при запросе паролей в командной строке. Даже если вы их видите никаких символов, система учитывает нажатия клавиш. Введя пароль, нажмите RETURN.
Нажмите y , чтобы ответить yes и подтвердить установку.
Убедитесь, что Homebrew настроен правильно. Для этого введите команду:
Если за это время не появилось обновлений, вы увидите в терминале:
В противном случае вы можете получить предупреждение о запуске другой команды, такой как brew update, которая обновит установку Homebrew.
Теперь, когда пакетный менеджер Homebrew установлен, вы можете установить Node.js.
Потоки
Потоки позволяют обрабатывать данные по частям, не дожидаясь конца операции (например, чтения файла). Допустим, мы хотим вернуть пользователю запрошенный файл произвольного размера. Наш код может выглядеть следующим образом:
Этот код будет работать, особенно на локальной машине, но вы видите в нем проблему? Мы помещаем читаемый файл в память, и если он слишком велик, то это не будет работать. Это также не сработает, если у нас много параллельных запросов.
Но этот файл нам совсем не нужен – мы просто возвращаем его, даже не заглядывая внутрь. Поэтому можно прочитать какую-то его часть, немедленно отдать ее, освободить память и повторить все это снова, пока не закончим. Это упрощенное описание потоков – у нас есть механизм получения данных в чанках (кусками), и мы можем решать, что с ними делать. Например, сделаем то же самое:
Здесь мы создаем поток для чтения из файла. Этот поток реализует класс . По событию мы получаем следующий чанк, а событие сигнализирует, что поток закончился. Эта реализация работает так же, как и раньше – мы ждем, пока весь файл будет прочитан, а затем возвращаем егопользователю. Проблема сохранения данных в памяти никуда не делась.
Объект ответа сам является , это значит, что мы можем отдавать ему информацию напрямую, не сохраняя ее:
Теперь нам больше не нужна переменная , мы просто записываем уже прочитанные чанки сразу в ответ! Это означает, что можно читать даже большие файлы и не беспокоиться о параллельных запросах – память не будет исчерпана.
Осталась еще одна проблема: эти потоки имеют разные задержки. Через некоторое время поток ответа будет перегружен, так как он намного медленнее. У Node.js есть решение для этой проблемы: каждый читаемый поток имеет , который контролирует загрузку и управляет подачей данных, и ее по необходимости. Используя этот метод, можно упростить код:
Потоки в Node менялись несколько раз, поэтому будьте особенно внимательны при чтении старых руководств и всегда проверяйте официальную документацию!
Conclusion
In this tutorial, we’ve covered the basics of working with npm. We’ve demonstrated how to install Node.js from the project’s download page, how to alter the location of global packages (so we can avoid using ), and how to install packages in local and global mode. We also covered deleting, updating and installing a certain version of a package, as well as managing a project’s dependencies.
From here, you might compare npm and Yarn to find out which suits your needs best. You can handle more complex needs using nvm, the Node Version Manager, or learn how to host and publish private npm packages. And if you’re feeling like exploring the next generation of JavaScript runtimes, you can learn Deno and read up on how Deno package management works.
3) Using nvm to install and update Node.js (recommended)#
Node Version Manager, , is a bash script to manage multiple active Node.js versions. It is easy to run with the following steps:
-
Open new terminal window
-
Run install script
-
The script clones the nvm repository to and adds the source lines to your shell profile, which is one the following: , or . You can use either or , depending on what you have on your computer:
1
curl -o- https:
2
install.sh | bash
1
wget -qO- https:
2
install.sh | bash
-
You can also add the source lines manually. Open your shell profile, which is one the following: , or . Since I use zsh shell, I would do:
1
vim .zshrc
-
This command opens your shell profile. Then copy and paste the following:
1
export NVM_DIR="$HOME/.nvm"
2
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
3
[ -s "$NVM_DIR/bash_completion" ] && \. "\$NVM_DIR/bash_completion"
4
5
# This loads nvm bash_completion
-
Close the vim file by pressing: + + +
-
-
Reload the shell configuration by using the following command
1
source ~/.zshrc
-
Verify the installation
1
command -v nvm
-
This should print if the installation was successful.
-
Use to install Node.js. There are several commands you will find handy
-
List all command options by using: +
-
Download, compile, and install the latest release of node:
1
nvm install node
Here is an alias for the latest version
-
Install the specific version, for example v12.18.0:
1
nvm install v12.18.0
-
Next, you actually have to use that specific version of Node that you just installed:
1
nvm use v12.18.0
-
Print the path to the executable file where the specific version was installed:
1
nnvm which 12.18.0
-
Change the default Node.js version, let’s say from 12.18.0 to 10.20.1:
1
nvm alias default 10.16.3
-
Migrate packages from a previous Node.js version: , for example:
1
nvm install v12.18.0 --reinstall-packages-from=v10.20.1
-
Delete an older version of Node.js:
1
nvm uninstall v10.20.1
-
Install and use the LTS version:
1
nvm install --lts
2
nvm use --lts
-
List all installed Node.js versions available locally on your machine:
1
nvm list
-
-
Finally, use to install NPM
1
nvm install-latest-npm
Please note that this installs the latest working NPM on the node version that you’re currently using, such as . This is something you want because you want to update the NPM and packages only for that Node.js version which is associated with a specific project and its requirements. Once you have NPM set up, there are several handy commands you can check out:
-
List globally installed packages:
1
npm ls -g --depth=
-
Update all globally installed packages:
1
npm update -g
Again, note that this will update packages inside the path of your active Node.js version instead of the system global path.
-
Congratulations, you have now successfully installed and understood the ins and outs of Node.js and NPM.
Here is what you have learned:
-
You have seen the installation of Node.js via the mac installer
-
You also have seen the installation of Node.js via , arguably the most popular package manager for macOS
-
However, the best way to install Node.js is using Node Version Manager. This gives you additional control and flexibility when it comes to customizing different Node.js versions, which might be needed if you are hopping between different projects and their requirements.
I’ve helped you to explore some very basic commands, but please don’t stop here. It’s just the beginning and it’s up to you where this journey will take you!
Просматривать
Работа с библиотеками JavaScript может оказаться сложным процессом. Вам постоянно приходится переключаться между шаблонами, чтобы проанализировать, какие библиотеки и виджеты используют определенные сценарии. И, в конце концов, эти сценарии начинают складываться, когда вы начинаете терять из виду, что для чего работает. По мере развития JavaScript представление о том, что мы просто создаем веб-сайты, исчезло. Во многих отношениях веб-сайты, созданные с использованием JS, больше похожи на приложения — универсальные проекты, которые зависят от тяжелых библиотек, работающих независимо.
У Browserify много применений, но наиболее важным из них является то, что он позволяет нам создавать такую организованную, хорошо структурированную и удобную для навигации базу кода на стороне клиента. Любой может использовать Browserify для создания надежных компонентов, которые быстро распределяют зависимости в соответствии с их использованием в любой конкретной ситуации. Node.js проекты имеют тенденцию складываться в пакеты, библиотеки и сценарии, а Browserify помогает все аккуратно структурировать вместе.
Async.js
Асинхронный подход изменил способ взаимодействия содержимого JavaScript с вашими веб-страницами. Это позволяет повысить производительность за счет избавления от JavaScript, блокирующего рендеринг. Блокировка рендеринга означает, что любое содержимое JavaScript, находящееся в верхней части страницы, не будет загружено; то есть до тех пор, пока сам JavaScript не завершит загрузку на странице. Это может оказать определенное влияние на производительность вашего веб-сайта. Но с помощью таких библиотек, как Async.js, вы можете открыть дверь для загрузки содержимого JavaScript вместе со всем остальным, иногда даже быстрее. Изначально эта библиотека предназначалась для использования с Node.js, но в наши дни она будет работать с браузерами. слишком. Таким образом, вы можете внедрить его в любой проект, независимо от того, использует он Node.js или нет. Эта библиотека дает вам контроль над более чем двадцатью функциями.
Событийно-ориентированный подход
Главная особенность Node.js в том, что вместо традиционной модели параллелизма на основе потоков автор выбрал событийно-ориентированный подход. Это такая парадигма программирования, в которой выполнение программ определяется событиями. Например, это действие пользователя, поступление сетевого пакета, сообщение из другой программы и так далее.
Такой подход сильно упрощает программирование некоторых приложений, особенно при реализации удобного интерфейса ввода-вывода (I/O), как у Node.js. По легенде, идея создания пришла автору, когда он увидел полосу загрузки файлов на Flickr, которая не понимала реального процента загрузки файлов, то есть не имела обратной связи от браузера из-за отсутствия событийной привязки.
С распространением в интернете социальных сетей и других интерактивных сайтов резко выросла востребованность Node.js как платформы для приложений, реагирующих на действия пользователя: чатов, игр, инструментов совместной работы — теперь всё это делают на JavaScript с помощью среды исполнения.
Таким образом, Node.js — это событийно-ориентированный I/O-фреймворк на JavaScript. Технические особенности делают приложения на его основе легковесными и эффективными. Этим и объясняется его огромная популярность.
Карма
Тестирование, тестирование и еще раз тестирование! Нам необходимо протестировать наши приложения, чтобы убедиться в их стабильности и производительности. Нам также нужны подходящие инструменты для работы. Карма — один из таких инструментов, который прекрасно справляется с задачей тестирования. Причины использования Karma длинны, некоторые из них включают: возможность тестировать свой код в браузере, а также кроссбраузерность. Вы можете использовать Karma для запуска теста во время локальной разработки, во время интеграции сервера и при каждом сохранении файла. В терминале работает безотказно, любители терминала — радуйтесь!
Установка
После того, как вы скачали установочный файл Node.js на свой жесткий диск, вам нужно перейти в директорию с этим файлом и запустить его для начала процесса установки. Программа-установщик запускается двойным щелчком мыши и устанавливает Node.js в автоматическом режиме.
Windows
Установочный файл Node.js для Windows имеет название вида node-v00.00.0-x86.msi, где вместо нулей будет указана версия Node, например node-v16.17.0-x86.msi означает что вы устанавливаете версию 16.17.0.
После недолгого процесса инсталяции (обычно не более пары минут), вы увидите новую папку в меню Пуск. Проверить установку можно запустив командную строку или PowerShell и введя команду node -v (результатом работы должен быть вывод версии Node.js). Если команда отработала успешно и не возникло каких либо ошибок — Node.js для Windows установился.
MacOS
Файл для установки Node на компьютеры и ноутбуки Apple, работающие под управлением операционной системы MacOS, имеет название вроде node-v00.00.0-x86.pkg, где нули так же указана версия Node.js, которую вы хотите установить. Запустите этот файл и несколько раз нажмите кнопку «Продолжить».
После того, как инсталлятор завершил все процессы, запустите окно терминала и введите в него команду node -v — результатом работы должна быть версия Node установленная в вашей опреационной системе.
Linux
Если вы хотите установить Node.js для Linux, то для начала, попробуйте поискать возможность установки при помощи менеджера пакетов, который используется в вашей ОС. Например, для операционных систем Ubuntu, вы можете установить Node при помощи команды sudo apt install nodejs выполненной в терминале.
Если, по каким либо причинам, вы не можете установить Node.js используя менеджер пакетов, вы всегда можете установить его из исходного кода. Для этого скачайте архив tar.gz в разделе Downloads, перейдите в директорию со скачанным архивом и выполните следующую команду:
Замените node-v16.17.0.tag.gz на имя скачанного архива и нажмите Enter.
2) Using homebrew to install and update Node.js#
Homebrew is arguably the most popular package manager for macOS and makes installing Node.js straightforward. Let’s check whether you have Homebrew installed:
1
brew -v
If Homebrew is installed on your mac, you should see its version, for example, . If not, you can install Homebrew with the following command:
1
/usr/binruby -e "$(curl -fsSL https://raw.githubusercontent.com/
2
Homebrewinstallmasterinstall)"
Assuming that Homebrew is already installed, type:
1
brew update
2
brew install node
And that’s all you need. Again, try to confirm Node.js version and to confirm NPM version.
While using Homebrew for Node.js installation is very easy, it comes with one disadvantage:
Unfortunately, Homebrew has a habit of installing only the latest version of Node.js.
This could be a problem because sometimes applications require a certain version of Node.js to work. Having the flexibility of using specific versions can be an asset. To fix this problem, the best option to install Node.js is via , which stands for Node Version Manager.
Обновление зависимостей проекта до их самых свежих версий
Когда вы устанавливаете пакет командой вида , из репозитория загружается самая свежая из доступных версий и помещается в папку . При этом соответствующие записи добавляются в файлы и , находящиеся в папке проекта.
Кроме того, устанавливая некий пакет, npm находит и устанавливает его зависимости.
Предположим, мы устанавливаем уже знакомый вам пакет cowsay, выполняя команду . Пакет будет установлен в папку проекта, а в файл попадёт следующая запись:
В так же будут внесены сведения об этом пакете. Вот его фрагмент:
Из этих двух файлов можно узнать, что мы установили cowsay версии 1.3.1, и то, что правило обновления пакета указано в виде . В четвёртой части этой серии материалов мы уже говорили о правилах семантического версионирования. Напомним, что такая запись означает, что npm может обновлять пакет при выходе его минорных и патч-версий.
Если, например, выходит новая минорная версия пакета и мы выполняем команду , то обновляется установленная версия пакета и при этом сведения об установленном пакете обновляются в файле , а файл остаётся неизменным.
Для того чтобы узнать, вышли ли новые версии используемых в проекте пакетов, можно воспользоваться следующей командой:
Вот результаты выполнения этой команды для проекта, зависимости которого давно не обновлялись:
Анализ устаревших зависимостей проекта
Некоторые из доступных обновлений пакетов представляют собой их мажорные релизы, обновления до которых не произойдёт при выполнении команды . Обновление до мажорных релизов этой командой не производится, так как они (по определению) могут содержать серьёзные изменения, не отличающиеся обратной совместимостью с предыдущими мажорными релизами, а npm стремится избавить разработчика от проблем, которые может вызвать использование подобных пакетов.
Для того чтобы обновиться до новых мажорных версий всех используемых пакетов, глобально установите пакет :
Затем запустите утилиту, предоставляемую им:
Эта команда обновит файл , внеся изменения в указания о подходящих версиях пакетов в разделы и . Это позволит npm обновить пакеты, используемые в проекте, до новых мажорных версий после запуска команды .
Если вы хотите установить самые свежие версии пакетов для только что только что загруженного проекта, в котором пока нет папки , то, вместо , выполните команду .
Утилита npx
▍Использование npx для упрощения запуска локальных команд
Node.js-разработчики опубликовали множество исполняемых файлов (утилит) в виде пакетов, которые предполагалось устанавливать глобально, что обеспечивало удобный доступ к их возможностям, так как запускать их из командной строки можно было, просто введя имя соответствующей команды. Однако работать в такой среде было весьма некомфортно в том случае, если требовалось устанавливать разные версии одних и тех же пакетов.
Применение команды вида приводит к автоматическому поиску нужного файла в папке проекта . Это избавляет от необходимости знания точного пути к подобному файлу. Так же это делает ненужной глобальную установку пакета с обеспечением доступа к нему из любого места файловой системы благодаря использованию системной переменной .
▍Выполнение утилит без необходимости их установки
В npx имеется ещё одна интереснейшая возможность, благодаря которой утилиты можно запускать без их предварительной установки. Полезно это, в основном, по следующим причинам:
- Не требуется установка утилит.
- Можно запускать разные версии одних и тех же утилит, указывая нужную версию с помощью конструкции .
Посмотрим на то, как пользоваться этим механизмом, на примере уже известной вам утилиты . Так, если пакет cowsay установлен глобально, выполнение в командной строке команды приведёт к выводу в консоль «говорящей» коровы:
Если же пакет cowsay не будет установлен глобально, подобная команда выдаст ошибку.
Утилита npx позволяет выполнять подобные команды без их установки. Выглядит это, в рамках нашего примера, так:
Такая команда сработает, но, хотя «говорящая» корова, по большому счёту, особой пользы не приносит, тот же самый подход можно использовать и для выполнения куда более полезных команд. Вот несколько примеров:
- Существует инструмент командной строки, предназначенный для создания и запуска Vue-приложений. С использованием npx его можно вызвать так: .
- Для создания React-приложений можно пользоваться утилитой . Её вызов через npx выглядит так: .
После загрузки и использования соответствующего кода npx его удалит.
▍Запуск JavaScript-кода с использованием различных версий Node.js
Для того чтобы запускать некий код с использованием разных версий Node.js, можно, с использованием npx, обращаться к npm-пакету , указывая его версию. Выглядит это так:
Это позволяет отказаться от использования инструментов наподобие nvm или других менеджеров версий Node.js.
▍Запуск произвольных фрагментов кода, доступных по некоему адресу
Конечно, при выполнении подобного кода нельзя забывать о безопасности. Npx даёт в руки разработчика большие возможности, но они означают и большую ответственность.
▍Итоги
В следующий раз мы обсудим некоторые базовые механизмы Node.js, понимание которых необходимо для успешной разработки приложений для этой платформы.
Уважаемые читатели! Пользуетесь ли вы npx?
Установка Node.js
Перейдите на страницу загрузок Node.js и скачайте нужную вам версию. Есть установщики для Windows и Mac, а также скомпилированные бинарники и исходный код для Linux. Кроме того, в Linux вы можете установить Node.js с помощью пакетного менеджера, все это описано в документации.
В этой статье мы будем использовать стабильную версию 5.7.0.
Посмотреть, где установлен Node и проверить версию можно следующими командами:
Чтобы удостовериться, что установка прошла успешно, выполним несколько команд в простой интерактивной среде Node (REPL).
Установка работает, поэтому теперь мы можем сфокусироваться на npm, который включен в установку.
Step 2 — Installing Xcode’s Command Line Tools
Xcode is an integrated development environment (IDE) that is comprised of software development tools for macOS. You won’t need Xcode to write Node.js programs, but Node.js and some of its components will rely on Xcode’s Command Line Tools package.
Execute this command in the Terminal to download and install these components:
You’ll be prompted to start the installation, and then prompted again to accept a software license. Then the tools will download and install automatically.
We’re now ready to install the package manager Homebrew, which will let us install the latest version of Node.js.