Создание сайтов в Курске. Руководство по диспетчеру пакетов Node: установка npm + использование команд и модулей

 
 

Это пошаговое руководство покажет вам, как установить npm и освоить общие команды в интерфейсе командной строки Node Package Manager (npm).

Node.js позволяет писать приложения на JavaScript на сервере. Он построен на среде выполнения JavaScript V8 и написан на C++, поэтому работает быстро. Первоначально он задумывался как серверная среда для приложений, но разработчики начали использовать его для создания инструментов, помогающих им в автоматизации локальных задач. С тех пор совершенно новая экосистема инструментов на основе Node (таких как Grunt, Gulp и webpack) эволюционировала, чтобы изменить лицо фронтенд-разработки.

Чтобы использовать эти инструменты (или пакеты) в Node.js, нам нужно иметь возможность устанавливать их и управлять ими удобным способом. Здесь на помощь приходит npm, менеджер пакетов Node. Он устанавливает пакеты, которые вы хотите использовать, и предоставляет удобный интерфейс для работы с ними.

В этом руководстве мы рассмотрим основы работы с npm. Мы покажем вам, как устанавливать пакеты в локальном и глобальном режиме, а также удалять, обновлять и устанавливать определенную версию пакета. Мы также покажем вам, как работать с package.jsonзависимостями проекта. Если вы больше любите видео, почему бы не подписаться на SitePoint Premium и не посмотреть наш бесплатный скринкаст: Что такое npm и как его использовать?

Но прежде чем мы сможем начать использовать npm, нам сначала нужно установить Node.js в нашей системе. Давайте сделаем это сейчас.

Установите npm с Node.js

Перейдите на страницу загрузки Node.js и скачайте нужную версию. Доступны установщики для Windows и Mac, а также предварительно скомпилированные двоичные файлы и исходный код Linux. Для Linux вы также можете установить Node через менеджер пакетов, как описано здесь.

В этом уроке мы будем использовать версию 12.15.0. На момент написания это текущая версия Node с долгосрочной поддержкой (LTS).

Совет: вы также можете установить Node с помощью менеджера версий. Это устраняет проблему с разрешениями, описанную в следующем разделе.

Посмотрим, куда был установлен узел и проверим версию:

$ which node

/usr/bin/node

$ node —version

v12.15.0

Чтобы убедиться, что ваша установка прошла успешно, давайте попробуем Node REPL:

$ node

> console.log ('Node is running’) ;

Node is running

>.help

.break Sometimes you get stuck, this gets you out

.clear Alias for.break

.editor Enter editor mode

.exit the repl

.help Print this help message

.load JS from a file into the REPL session

.save all evaluated commands in this REPL session to a file

Press ^C to abort current expression, ^D to exit the repl

Установка Node.js сработала, поэтому теперь мы можем сосредоточить внимание на npm, который был включен в установку:

$ which npm

/usr/bin/npm

$ npm —version

6.13.7

Установите обновления npm

npm, изначально обозначавший Node Package Manager, — это отдельный от Node.js проект. Он имеет тенденцию обновляться чаще. Вы можете проверить последнюю доступную версию npm на этой странице. Если вы понимаете, что у вас более старая версия, вы можете обновить ее следующим образом.

Для пользователей Linux и Mac используйте следующую команду:

npm install -g npm@latest

Установите пакеты npm в глобальном режиме

На данный момент у нас глобально установлен только один пакет — сам пакет npm. Итак, давайте изменим это и установим UglifyJS (инструмент минификации JavaScript). Мы используем —globalфлаг, но его можно сократить до -g:

$ npm install uglify-js —global

/home/sitepoint/.node_modules_global/bin/uglifyjs → /home/sitepoint/.node_modules_global/lib/node_modules/uglify-js/bin/uglifyjs

+ uglify-js@3.7.7

added 3 packages from 38 contributors in 0.259s

Как видно из вывода, дополнительные пакеты установлены. Это зависимости UglifyJS.

Список установленных глобальных пакетов npm

Мы можем перечислить глобальные пакеты, которые мы установили, с помощью npm listкоманды:

$ npm list —global

home/sitepoint/.node_modules_global/lib

├─┬ npm@6.9.0

│ ├── abbrev@1.1.1

│ ├── ansicolors@0.3.2

│ ├── ansistyles@0.1.3

│ ├── aproba@2.0.0

│ ├── archy@1.0.0

...................

└─┬ uglify-js@3.5.3

├── commander@2.19.0

└── source-map@0.6.1

Вывод, однако, довольно подробный. Мы можем изменить это с помощью —depth=0опции:

$ npm list -g —depth=0

/home/sitepoint/.node_modules_global/lib

├── npm@6.13.7

└── uglify-js@3.7.7

Так-то лучше; теперь мы видим только пакеты, которые мы установили, вместе с номерами их версий.

Любые пакеты, установленные глобально, станут доступны из командной строки. Например, вот как вы могли бы использовать пакет Uglify для минимизации example.jsв example.min.js:

$ uglifyjs example.js -o example.min.js

Установите пакеты npm в локальном режиме

Когда вы устанавливаете пакеты локально, вы обычно делаете это с помощью package.jsonфайла. Давайте продолжим и создадим его:

$ mkdir project && cd project

$ npm init

package name: (project)

version: (1.0.0)

description: Demo of package.json

entry point: (index.js)

test command:

git repository:

keywords:

author:

license: (ISC)

Нажмите Return, чтобы принять значения по умолчанию, затем нажмите еще раз, чтобы подтвердить свой выбор. Это создаст package.jsonфайл в корне проекта:

{

«name»: «project»,

«version»: «1.0.0»,

«description»: «»,

«main»: «index.js»,

«scripts»: {

«test»: «echo \»Error: no test specified\» && exit 1»

},

«author»: «»,

«license»: «ISC»

}

Совет: если вам нужен более быстрый способ создания package.jsonфайла, используйте npm init —y.

Мы надеемся, что поля не требуют пояснений, за исключением mainи scripts. Это mainполе является основной точкой входа в вашу программу, и оно scriptsпозволяет указать команды сценария, которые выполняются в разное время в жизненном цикле вашего пакета. Мы можем пока оставить их как есть, но если вы хотите узнать больше, см. документацию package.json по npm и эту статью об использовании npm в качестве инструмента сборки.

Теперь давайте попробуем установить Underscore:

$ npm install underscore

npm notice created a lockfile as package-lock.json. You should commit this file.

npm WARN project@1.0.0 No repository

Как видите, в нашем проекте был установлен Underscore v1.9.2. Символ вставки (^) перед номером версии указывает, что при установке npm выберет самую старшую версию пакета, которую сможет найти, где должна совпадать только основная версия (если package-lock.jsonнет файла). В нашем случае это будет что-то ниже версии 2.0.0. Этот метод управления версиями зависимостей (major.minor.patch) известен как семантическое управление версиями. Подробнее об этом можно прочитать здесь: Semantic Versioning: Why You Should Be Using it.

Также обратите внимание, что подчеркивание было сохранено как свойство dependenciesполя. Это стало значением по умолчанию в последней версии npm и используется для пакетов (таких как Underscore), необходимых для запуска приложения. Также можно было бы сохранить пакет как файл devDependency, указав —save-devфлаг. devDependenciesпакеты, используемые в целях разработки — например, для запуска тестов или транспиляции кода.

Совет: вы также можете добавить private: trueдля package.jsonпредотвращения случайной публикации частных репозиториев, а также для подавления любых предупреждений, генерируемых при запуске npm install.

Безусловно, самой большой причиной использования package.jsonдля указания зависимостей проекта является переносимость. Например, когда вы клонируете чужой код, все, что вам нужно сделать, это запустить npm iего в корне проекта, и npm разрешит и получит все необходимые пакеты для запуска приложения. Мы рассмотрим это более подробно позже.

Прежде чем закончить этот раздел, давайте быстро проверим, работает ли Underscore. Создайте файл с именем test.jsв корне проекта и добавьте следующее:

const _ = require («underscore») ;

console.log (_.range (5));

Запустите файл с помощью node test.js, и вы должны увидеть [0, 1, 2, 3, 4]вывод на экран.

Удалить локальные пакеты npm

npm — это менеджер пакетов, поэтому он должен иметь возможность удалять пакеты. Предположим, что текущий пакет Underscore вызывает у нас проблемы с совместимостью. Мы можем удалить пакет и установить более старую версию, например:

$ npm uninstall underscore

removed 1 package in 0.386s

$ npm list

project@1.0.0 /home/sitepoint/project

└── (empty)

Установите определенную версию пакета npm

Теперь мы можем установить пакет Underscore в нужной нам версии. Мы делаем это, используя знак @ для добавления номера версии:

$ npm install underscore@1.9.1

+ underscore@1.9.1

added 1 package in 1.574s

$ npm list

project@1.0.0 /home/sitepoint/project

└── underscore@1.9.1

Обновите пакет npm

Давайте проверим, есть ли обновление для пакета Underscore:

$ npm outdated

Package Current Wanted Latest Location

underscore 1.9.1 1.9.2 1.9.2 project

Столбец Current показывает нам версию, установленную локально. Столбец Latest сообщает нам последнюю версию пакета. А столбец Wanted сообщает нам о последней версии пакета, до которой мы можем обновиться, не нарушая существующий код.

Помните package-lock.jsonфайл из предыдущего? Этот файл, представленный в npm v5, предназначен для обеспечения того, чтобы зависимости оставались одинаковыми на всех машинах, на которых установлен проект. Он автоматически генерируется для любых операций, в которых npm изменяет либо node_modulesпапку, либо package.jsonфайл.

Вы можете пойти дальше и попробовать это, если хотите. Удалите node_modulesпапку, затем запустите заново npm i (это сокращение от npm install). npm переустановит Underscore v1.9.1, хотя мы только что увидели, что v1.9.2 доступна. Это потому, что мы указали версию 1.9.1 в package-lock.jsonфайле:

{

«name»: «project»,

«version»: «1.0.0»,

«lockfileVersion»: 1,

«requires»: true,

«dependencies»: {

«underscore»: {

«version»: «1.9.1»,

«resolved»: «https: //registry.npmjs.org/underscore/-/underscore-1.9.1.tgz»,

«integrity»: «sha512−5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==»

}

}

}

До появления package-lock.jsonфайла несовместимые версии пакетов были большой головной болью для разработчиков. Обычно это решалось с помощью npm-shrinkwrap.jsonфайла, который нужно было создавать вручную.

Теперь предположим, что последняя версия Underscore исправила ошибку, которая была у нас ранее, и мы хотим обновить наш пакет до этой версии:

$ npm update underscore

+ underscore@1.9.2

updated 1 package in 0.236s

$ npm list

project@1.0.0 /home/sitepoint/project

└── underscore@1.9.2

Совет: чтобы это работало, Underscore должен быть указан как зависимость в package.json. Мы также можем выполнить npm update, если у нас есть много устаревших модулей, которые мы хотим обновить.

Поиск пакетов npm

Мы использовали mkdirкоманду пару раз в этом уроке. Есть ли пакет Node с такой функциональностью? Давайте использовать npm search:

$ npm search mkdir

NAME | DESCRIPTION | AUTHOR | DATE

mkdir | Directory creation... | =joehewitt | 2012-04-17

fs-extra | fs-extra contains... | =jprichardson... | 2019-06-28

mkdirp | Recursively mkdir,... | =isaacs... | 2020-01-24

make-dir | Make a directory... | =sindresorhus | 2019-04-01

...

Есть (mkdirp). Давайте установим его:

$ npm install mkdirp

+ mkdirp@1.0.3

added 1 package and audited 2 packages in 0.384s

Теперь создайте mkdir.jsфайл и скопируйте-вставьте этот код:

const mkdirp = require ('mkdirp’) ;

const made = mkdirp.sync ('/tmp/foo/bar/baz’) ;

console.log (`made directories, starting with ${made}`) ;

Далее запускаем его из терминала:

$ node mkdir.js

made directories, starting with /tmp/foo

Используйте npm для переустановки зависимостей проекта

Давайте сначала установим еще один пакет:

$ npm install request

+ request@2.88.0

added 48 packages from 59 contributors and audited 65 packages in 2.73s

found 0 vulnerabilities

Проверьте package.json:

«dependencies»: {

«mkdirp»: «^1.0.3»,

«request»: «^2.88.0»,

«underscore»: «^1.9.2»

},

Обратите внимание, что список зависимостей обновляется автоматически. Если вы хотите установить пакет, не сохраняя его в package.json, просто используйте —no-saveаргумент.

Предположим, вы клонировали исходный код своего проекта на другую машину, и мы хотим установить зависимости. Давайте node_modulesсначала удалим папку, затем выполним npm install:

$ rm -R node_modules

$ npm list —depth=0

project@1.0.0 /home/sitepoint/project

├── UNMET DEPENDENCY mkdirp@1.0.3

├─┬ UNMET DEPENDENCY request@2.88.0

...

└── UNMET DEPENDENCY underscore@1.9.2

npm ERR! missing: mkdirp@1.0.3, required by project@1.0.0

npm ERR! missing: request@2.88.0, required by project@1.0.0

npm ERR! missing: underscore@1.9.2, required by project@1.0.0

...

$ npm install

added 50 packages from 60 contributors and audited 65 packages in 1.051s

found 0 vulnerabilities

Если вы посмотрите на свою node_modulesпапку, вы увидите, что она снова создается заново. Таким образом, вы можете легко делиться своим кодом с другими, не перегружая свой проект и исходные репозитории зависимостями.

Управление кешем npm

Когда npm устанавливает пакет, он сохраняет копию, поэтому в следующий раз, когда вы захотите установить этот пакет, ему не нужно будет подключаться к сети. Копии кэшируются в.npmкаталоге по вашему домашнему пути:

$ ls ~/.npm

anonymous-cli-metrics.json _cacache index-v5 _locks _logs node-sass

Этот каталог со временем будет загроможден старыми пакетами, поэтому полезно время от времени очищать его:

$ npm cache clean —force

Вы также можете очистить все node_moduleпапки из своей рабочей области, если в вашей системе есть несколько проектов узлов, которые вы хотите очистить:

find. -name «node_modules» -type d -exec rm -rf '{}' +

Используйте npm Audit для сканирования зависимостей на наличие уязвимостей

Вы заметили, что все они found 0 vulnerabilitiesразбросаны по выходным данным CLI? Причина этого в том, что в npm была введена новая функция, которая позволяет разработчикам сканировать зависимости на наличие известных уязвимостей безопасности.

Давайте попробуем эту функцию, установив старую версию express:

$ npm install express@4.8.0

express@4.8.0

added 36 packages from 24 contributors and audited 123 packages in 2.224s

found 21 vulnerabilities (8 low, 9 moderate, 4 high)

run `npm audit fix` to fix them, or `npm audit` for details

Как только мы закончим установку, мы получим краткий отчет о том, что найдено несколько уязвимостей. Вы можете запустить команду npm auditдля просмотра более подробной информации:

$ npm audit

=== npm audit security report ===

# Run npm install express@4.17.1 to resolve 21 vulnerabilities

┌───────────────┬──────────────────────────────────────────────────────────────┐

│ High │ Regular Expression Denial of Service │

├───────────────┼──────────────────────────────────────────────────────────────┤

│ Package │ negotiator │

├───────────────┼──────────────────────────────────────────────────────────────┤

│ Dependency of │ express │

├───────────────┼──────────────────────────────────────────────────────────────┤

│ Path │ express > accepts > negotiator │

├───────────────┼──────────────────────────────────────────────────────────────┤

│ More info │ https://nodesecurity.io/advisories/106 │

└───────────────┴──────────────────────────────────────────────────────────────┘

┌───────────────┬──────────────────────────────────────────────────────────────┐

│ Moderate │ Timing Attack │

├───────────────┼──────────────────────────────────────────────────────────────┤

│ Package │ cookie-signature

├───────────────┼──────────────────────────────────────────────────────────────┤

│ Dependency of │ express │

├───────────────┼──────────────────────────────────────────────────────────────┤

│ Path │ express > cookie-signature

├───────────────┼──────────────────────────────────────────────────────────────┤

│ More info │ https://nodesecurity.io/advisories/134 │

└───────────────┴──────────────────────────────────────────────────────────────┘

Вы получите подробный список пакетов с уязвимостями. Если вы посмотрите на Pathполе, оно показывает путь зависимости. Например, Path express > accepts > negotiatorозначает, что Express зависит от Acceptsпакета. Пакет Acceptsзависит от negotiatorпакета, содержащего уязвимость.

Есть два способа решить все эти проблемы. Мы можем либо выполнить команду npm install express@4.17.1, как было предложено, либо запустить npm audit fix. Сделаем последнее:

$ npm audit fix

+ express@4.17.1

added 20 packages from 14 contributors, removed 7 packages and updated 29 packages in 1.382s

fixed 21 of 21 vulnerabilities in 122 scanned packages

Команда npm audit fixавтоматически устанавливает любые совместимые обновления для уязвимых зависимостей. Хотя это может показаться волшебством, обратите внимание, что уязвимости не всегда могут быть исправлены автоматически. Это может произойти, если вы используете пакет, который претерпел серьезные изменения, которые могут нарушить ваш текущий проект в случае обновления. В подобных ситуациях вам придется просмотреть свой код и вручную применить исправление.

Вы также можете запустить npm audit fix —force, если не возражаете против обновления пакетов с критическими изменениями. После выполнения команды запустите, npm auditчтобы убедиться, что все уязвимости устранены.

npm псевдонимы

Как вы могли заметить, существует несколько способов запуска команд npm. Вот краткий список некоторых часто используемых псевдонимов npm:

npm i : установить локальный пакет

npm i -g : установить глобальный пакет

npm un : удалить локальный пакет

npm up: пакеты обновлений npm

npm t: запустить тесты

npm ls: список установленных модулей

npm llили npm la: распечатать дополнительную информацию о пакете при перечислении модулей

Вы также можете установить несколько пакетов одновременно, например:

$ npm i express momemt lodash mongoose body-parser webpack

Если вы хотите просмотреть все распространенные команды npm, просто выполните npm helpдля полного списка. Вы также можете узнать больше в нашей статье 10 советов и приемов, которые сделают вас npm-ниндзя.

Выполнение пакетов с помощью npx

Вы также можете услышать разговоры о npx в своих путешествиях. Не путайте это с npm. Как мы узнали, npm — это инструмент для управления вашими пакетами, тогда как npx — это инструмент для выполнения пакетов. Он поставляется в комплекте с npm версии 5.2+.

Обычно npx используется для выполнения одноразовых команд. Например, представьте, что вы хотите запустить простой HTTP-сервер. Вы можете установить пакет http-server глобально в своей системе, что очень удобно, если вы будете использовать http-serverего на регулярной основе. Но если вы просто хотите протестировать пакет или хотите свести количество глобально установленных модулей к минимуму, вы можете перейти в каталог, в котором хотите его запустить, а затем выполнить следующую команду:

npx http-server

И это раскрутит сервер без установки чего-либо глобально.

Подробнее о npx можно прочитать здесь.

Вывод

В этом уроке мы рассмотрели основы работы с npm. Мы продемонстрировали, как установить Node.js со страницы загрузки проекта, как изменить расположение глобальных пакетов (чтобы избежать использования sudo) и как устанавливать пакеты в локальном и глобальном режимах. Мы также рассмотрели удаление, обновление и установку определенной версии пакета, а также управление зависимостями проекта.

Отсюда вы можете сравнить npm и Yarn, чтобы выяснить, что лучше всего соответствует вашим потребностям. Вы можете справиться с более сложными задачами, используя nvm, Node Version Manager, или узнать, как размещать и публиковать частные пакеты npm. А если вам хочется изучить среду выполнения JavaScript следующего поколения, вы можете изучить Deno и прочитать о том, как работает управление пакетами Deno.

С каждым новым выпуском npm делает огромные успехи в мире фронтенд-разработки. По словам его соучредителя, его пользовательская база меняется, и большинство из тех, кто его использует, вообще не используют его для написания Node. Скорее, он становится инструментом, который люди используют для сборки JavaScript во внешнем интерфейсе (серьезно, вы можете использовать его для установки чего угодно), и инструментом, который становится неотъемлемой частью написания современного JavaScript.

3D-печать5GABC-анализAndroidAppleAppStoreAsusCall-центрChatGPTCRMDellDNSDrupalExcelFacebookFMCGGoogleHuaweiInstagramiPhoneLinkedInLinuxMagentoMicrosoftNvidiaOpenCartPlayStationPOS материалPPC-специалистRuTubeSamsungSEO-услугиSMMSnapchatSonyStarlinkTikTokTwitterUbuntuUp-saleViasatVPNWhatsAppWindowsWordPressXiaomiYouTubeZoomАвдеевкаАктивные продажиАкцияАлександровск ЛНРАлмазнаяАлчевскАмвросиевкаАнализ конкурентовАнализ продажАнтимерчандайзингАнтрацитАртемовскАртемовск ЛНРАссортиментная политикаБелгородБелицкоеБелозерскоеБердянскБизнес-идеи (стартапы)БрендБрянкаБукингВахрушевоВендорВидеоВикипедияВирусная рекламаВирусный маркетингВладивостокВнутренние продажиВнутренний маркетингВолгоградВолновахаВоронежГорловкаГорнякГорскоеДебальцевоДебиторкаДебиторская задолженностьДезинтермедитацияДзержинскДивизионная система управленияДизайнДимитровДирект-маркетингДисконтДистрибьюторДистрибьюцияДобропольеДокучаевскДоменДружковкаЕкатеринбургЕнакиевоЖдановкаЗапорожьеЗимогорьеЗолотоеЗоринскЗугрэсИжевскИловайскИрминоКазаньКалининградКировскКировскоеКомсомольскоеКонстантиновкаКонтент-маркетингКонтент-планКопирайтингКраматорскКрасноармейскКрасногоровкаКраснодарКраснодонКраснопартизанскКрасный ЛиманКрасный ЛучКременнаяКураховоКурскЛисичанскЛуганскЛутугиноМакеевкаМариупольМаркетингМаркетинговая информацияМаркетинговые исследованияМаркетинговый каналМаркетинг услугМаркетологМарьинкаМедиаМелекиноМелитопольМенеджментМерчандайзерМерчандайзингМиусинскМолодогвардейскМоскваМоспиноНижний НовгородНиколаевНиколаевкаНишевой маркетингНовоазовскНовогродовкаНоводружескНовосибирскНумерическая дистрибьюцияОдессаОмскОтдел маркетингаПартизанский маркетингПервомайскПеревальскПетровскоеПлата за кликПоисковая оптимизацияПопаснаяПравило ПаретоПривольеПрогнозирование продажПродвижение сайтов в ДонецкеПроизводство видеоПромоПромоушнПрямой маркетингРабота для маркетологаРабота для студентаРазработка приложенийРаспродажаРегиональные продажиРекламаРеклама на асфальтеРемаркетингРетро-бонусРибейтРитейлРовенькиРодинскоеРостов-на-ДонуРубежноеСамараСанкт-ПетербургСаратовСватовоСвердловскСветлодарскСвятогорскСевастопольСеверодонецкСеверскСедовоСейлз промоушнСелидовоСимферопольСинергияСколковоСлавянскСнежноеСоздание сайтов в ДонецкеСоледарСоциальные сетиСочиСтаробельскСтаробешевоСтахановСтимулирование сбытаСуходольскСчастьеТелемаркетингТельмановоТираспольТорговый представительТорезТрейд маркетингТрейд промоушнТюменьУглегорскУгледарУкраинскХабаровскХарцызскХерсонХостингЦелевая аудиторияЦифровой маркетингЧасов ЯрЧелябинскШахтерскЮжно-СахалинскЮнокоммунаровскЯндексЯсиноватая