Пакетный менеджер npm. Команды для работы с NPM
- Перевод
npm - это пакетный менеджер node.js . С его помощью можно управлять модулями и зависимостями.
Небольшая шпаргалка всех моих любимых команд npm:
Установка npm
Обновление npm
Есть несколько способов чтобы обновить npm. Я предпочитаю:curl https://npmjs.org/install.sh | sh
или
npm install npm -g
Поиск пакетов в npm
npm search hook.ioПодсказка: Можно также использовать search.npmjs.org
Вторая подсказка: Для поиска необходимо знать имя нужного пакета (всё прекрасно ищет по любому слову как в имени пакета, так и в его описании, может неправильно перевёл?)
Просмотр информации о пакете
npm view hook.ioЛокальная установка пакетов
Для демонстрации возьмём пакет http-server.http-server is a package we"ve written which provides an easy to use wrapper around node"s core http.Server class. This module makes for a good example, since it"s API provides both a CLI binary and a requirable node.js module.
http-server - пакет, который мы написали, предоставляет более простой интерфейс в использовании базового модуля http.Server из node.js. Этот модуль хороший пример использования API как для бинарного CLI, так и для подключаемого модуля node.js.
npm install http-server
Так мы установим http-server в нашей рабочей директории.
Вы увидите новую папку в node_modules. Сейчас можете не обращать на это внимание.
Установка пакета в наше приложение
mkdir mynewapp/ cd mynewapp npm install http-server touch test.jstest.js
var HTTPServer = require("http-server"); var httpServer = new HTTPServer({ root: "./public" }); httpServer.start();запустим скрипт
node test.js
Обратите внимание, как мы делаем: require("http-server")? Что это за магия? (автор молодец)
http-server не является базовым модулем node.js. Этот пакет мы только что установили из npm. Node.js и npm взаимодействуют и автоматически подключают наши локальные модули из node_modules директории.
Понимание разницы между глобальной и локальной установкой
По умолчанию npm будет устанавливать все пакеты в локальном каталоге, в которым вы сейчас работаете. Это правильно. Это может показаться немного запутанным, если вы раньше работали с предыдущими системами управления пакетами.Например: mkdir anotherapp/ cd anotherapp/ touch test.js
test.js
var HTTPServer = require("http-server");теперь запустим наш скрипт
node test.js
мы получим эту ошибку:
node.js:134 throw e; // process.nextTick error, or "error" event on first tick ^ Error: Cannot find module "http-server" at Function._resolveFilename (module.js:326:11) at Function._load (module.js:271:25) at require (module.js:355:19) at Object.
Это вполне логично, мы установили http-server локально в "/mynewapp/", а не в "/anotherapp/".
Есть два решения в этой ситуации:
а) Установить ещё раз пакет, но локально в наше новое приложение
cd anotherapp/ npm install http-server
б) Установить пакет глобально
npm install http-server -g
Глобальная установка пакетов
Если вы хотите чтобы пакет был доступен всем приложениям, его нужно установить глобально:npm install http-server -g
Флаг -g означает, что http-server должен быть установлен глобально и быть доступными для всех приложений.
Теперь мы можем вызывать его require("http-server") в любом нашем приложении.
Кроме того, поскольку http-server пакет имеет свой исполняемый файл, то этот файл также будет установлен как исполняемый http-server и доступен в командах.
Теперь вы можете просто запустить команду:
http-server
Удаление локально установленного пакета
npm uninstall http-serverУдаление глобально установленного пакета
npm uninstall http-server -gУстановка определённой версии пакета
npm install [email protected]Установка модуля с Github
Важно. В некоторых случаях будут патчи, форки или ветви, которые вы хотите использовать, но которые еще не были опубликованы в npm. К счастью исходные коды для большинства npm модулей также доступна на www.github.comgit clone git://github.com/nodeapps/http-server.git cd http-server/ npm link
Теперь наша клонированная версия http-server связана локально.
Связи любых пакетов локально
Если у вас есть отдельный каталог содержащий пакет npm, то можно создать локальную связь для него. Это удобно в ситуациях, когда мы не хотим опубликовать наш пакет в хранилище npm.cd http-server/ npm link
На нашу локальную версию http-server создана «связана» для нашей локальной машины. (связь создаётся как «copy-paste», с начало нужно перейти в нужный катало и сделать «copy», потом перейти в нужный каталог и сделать «paste». Так вот сейчас мы изучили как делается «copy», а ниже будет про «paste» этого модуля)
Связи локальных пакетов для нескольких приложений
Как мы видели ранее npm устанавливает пакеты в локальный каталог по умолчанию. Так вот npm ссылка(связь) работает почти так же.mkdir newapp/ cd newapp/ npm link http-server
Мы указываем, что теперь создали связь из http-server в наше новое приложение newapp. Если бы мы не выполнили npm link http-server, то получили бы ошибку об отсутствующем модуле. (а вот наш и «paste» о чём я писал выше, теперь вам должна быть понятна логика создания связей)
Отмена связи между пакетами приложения
cd newapp/ npm unlink http-server(здесь мы просто отменяем наш «paste» для этого приложения)
Node.js делает возможным написание серверных приложений на JavaScript. Он построен на движке JavaScript V8 и написан на C++ - и поэтому он быстрый. Изначально он создавался как серверное окружение для приложений, но разработчики начали использовать его для создания инструментов, помогающих автоматизировать выполнение локальных задач. В итоге возникшая вокруг Node.js новая экосистема инструментов (типа Grunt и Gulp), привела к трансформации процесса фронтенд-разработки.
Чтобы использовать все эти инструменты (или пакеты) в Node.js нам нужна возможность устанавливать и управлять ими. Для этого создан npm, пакетный менеджер Node.js. Он устанавливает нужные вам пакеты и предоставляет удобный интерфейс для работы с ними. Но перед тем как начать использовать npm, вам надо установить в своей системе Node.js.
Установка Node.js
В этой статье мы будем использовать стабильную версию 5.7.0.
Посмотреть, где установлен Node и проверить версию можно следующими командами:
$ which node /usr/local/bin/node $ node --version v5.7.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 .exit Exit the repl .help Show repl options .load Load JS from a file into the REPL session .save Save all evaluated commands in this REPL session to a file > .exit
Установка работает, поэтому теперь мы можем сфокусироваться на npm, который включен в установку.
$ which npm /usr/local/bin/npm $ npm --version 3.6.0
Пакеты Node
С помощью npm можно устанавливать пакеты локально или глобально. В локальном режиме пакеты устанавливаются в каталог node_modules родительского каталога. Владельцем каталога является текущий пользователь. Глобальные пакеты устанавливаются в каталог {prefix}/lib/node_modules/ , владельцем которого является root (префиксом в данном случае обычно является каталог /usr/ или /usr/local). Это значит, что вам надо использовать sudo для глобальной установки пакетов, что может повлечь ошибки с полномочиями при разрешении сторонних зависимостей, а также создает проблему для безопасности. Изменим это:
Изменение места установки глобальных пакетов
Посмотрим, что скажет нам команда npm config .
$ npm config list ; cli configs user-agent = "npm/3.6.0 node/v5.7.0 linux x64" ; node bin location = /usr/local/bin/node ; cwd = /home/sitepoint ; HOME = /home/sitepoint ; "npm config ls -l" to show all defaults.
Мы получили основную информацию об установке. Теперь важно узнать место установки глобальных пакетов:
$ npm config get prefix /usr/local
Этот префикс мы хотим изменить так, чтобы устанавливать пакеты в свой домашний каталог. Для этого создайте в домашнем каталоге папку.node_modules_global и укажите ее в качестве места установки пакетов в конфигурации:
$ cd && mkdir .node_modules_global $ npm config set prefix=$HOME/.node_modules_global
Внеся такую небольшую правку в конфигурацию, мы изменили место для глобальной установки пакетов. Также в нашем домашнем каталоге появился файл.npmrc .
$ npm config get prefix /home/sitepoint/.node_modules_global $ cat .npmrc prefix=/home/sitepoint/.node_modules_global
Сам npm по-прежнему установлен в каталог, владельцем которого является root. Но так как мы поменяли место установки глобальных пакетов, мы можем использовать полученное преимущество. Мы установим npm еще раз, но теперь в место, указанное нами. Заодно мы получим последнюю версию npm.
$ npm install npm --global /home/sitepoint/.node_modules_global/bin/npm -> /home/sitepoint/.node_modules_global/lib/node_modules/npm/bin/npm-cli.js /home/sitepoint/.node_modules_global/lib └── [email protected]
Наконец, нам надо добавить.node_modules_global/bin в нашу переменную окружения $PATH , чтобы мы могли запускать глобальные пакеты из командной строки. Сделаем это, добавив следующую строку в файл.profile или.bash_profile и перезапустив терминал.
Export PATH="$HOME/.node_modules_global/bin:$PATH"
Теперь командная оболочка будет сразу находить пакеты, установленные в.node_modules_global/bin и использовать корректную версию npm .
$ which npm /home/sitepoint/.node_modules_global/bin/npm $ npm --version 3.7.5
Глобальная установка пакетов
На данный момент у нас уже есть один глобальный пакет - это сам пакет npm. Изменим это и установим еще один пакет, это будет UglifyJS (инструмент для минификации JavaScript). Для глобальной установки используется флаг --global , его можно записывать сокращенно -g .
$ npm install uglify-js --global /home/sitepoint/.node_modules_global/lib └─┬ [email protected] ├── [email protected] ├── [email protected] ├── [email protected] └─┬ [email protected] ├── [email protected] ├─┬ [email protected] │ ├─┬ [email protected] │ │ ├─┬ [email protected] │ │ │ ├─┬ [email protected] │ │ │ │ └── [email protected] │ │ │ ├── [email protected] │ │ │ └── [email protected] │ │ └── [email protected] │ ├── [email protected] │ └── [email protected] ├─┬ [email protected] │ └── [email protected] └── [email protected]
Как вы можете видеть из вывода в консоль, у нас установлены дополнительные пакеты - это зависимости UglifyJS.
Вывод списка установленных пакетов
Мы можем вывести список глобально установленных пакетов с помощью команды npm list с опцией --global:
$ npm list --global ├─┬ [email protected] │ ├── [email protected] │ ├── [email protected] │ ├── [email protected] │ ├── [email protected] .................... └─┬ [email protected] ├── [email protected] ├── [email protected] ├── [email protected]
Такой вывод списка, со всеми зависимостями, перенасыщен. Мы можем выводить его в более читаемом виде с помощью опции --depth=0:
$ npm list -g --depth=0 ├── [email protected] └── [email protected]
Стало лучше - теперь мы видим только список установленных пакетов с номерами их версий, без зависимостей.
Теперь мы можем обрабатывать файлы JavaScript в терминале с помощью UglifyJS. Например, следующая команда сделает из файла example.js минифицированный example.min.js:
$ uglifyjs example.js -o example.min.js
Локальная установка пакетов
Локальная установка используется в npm по умолчанию, то есть достаточно не использовать флаг --global . Пакет будет установлен в каталог node_modules родительского каталога. Создадим каталог с проектом в нашем домашнем каталоге:
$ mkdir ~/project && cd ~/project $ npm install underscore /home/sitepoint/project └── [email protected] $ ls node_modules $ ls node_modules underscore
Вывод списка локальных пакетов
Также как и в случае с глобальными пакетами, список локальных выводится командой npm list:
$ npm list /home/sitepoint/project └── [email protected]
Как видите, мы можем устанавливать локальные пакеты, где угодно. Это также значит, что мы можем создать другой каталог и установить туда другую версию пакета (в нашем случае это библиотека underscore).
Удаление локальных пакетов
Так как npm это пакетный менеджер, у него есть возможность удалять пакеты. Предположим, что установленная в предыдущем примере версия underscore вызывает проблемы с совместимостью. Мы можем удалить этот пакет и поставить более старую версию.
$ npm uninstall underscore - [email protected] node_modules/underscore $ npm list /home/sitepoint/project └── (empty)
Установка определенной версии пакета
Теперь установим нужную версию underscore. В команде установки номер версии указывается после символа @ :
$ npm install [email protected] /home/sitepoint/project └── [email protected] $ npm list /home/sitepoint/project └── [email protected]
Обновление пакета
В последней версии underscore исправили мешавший нам баг и мы хотим обновить версию этого пакета.
$ npm update underscore [email protected] node_modules/underscore $ npm list /home/sitepoint/project └── [email protected]
Примечание: для этой статьи, библиотека underscore была указана как зависимость в package.json (см. ).
Поиск пакетов
Мы уже пару раз использовали команду mkdir . Есть ли пакет node с подобным функционалом?
$ npm search mkdir npm WARN Building the local index for the first time, please be patient
Заключение
В этой статье освещены основы работы с npm. Я показал, как установить Node.js, как изменить место установки глобальных пакетов (так мы можем избежать использования sudo) и как установить пакеты локально и глобально. Я также рассмотрел удаление, обновление и установку определенной версии пакета, а также управление зависимостями проекта.
В каталоге npm тысячи пакетов и их число будет расти, с учетом анонса jQuery о публикации всех плагинов как пакетов npm.
Существует достаточно документации, в которой раскрывается вопрос «Почему Node?». Но что для меня действительно важнее, это не где Node находится сегодня, а где он будет завтра. Без сомнения, сообщество Rails принесло много к столу, но все эти замечательные идеи сложно проглотить, потому что они оказались заперты внутри Ruby. Каким бы потрясающим не был Ruby, не каждый желает стать разработчиком на Ruby.
В зависимости от процесса установки, npm может быть установлен, а может быть и нет. Для проверки просто запустите:
$ npm --version
Если npm не установлен, выполните следующее:
$ curl http://npmjs.org/install.sh | sh
npm - менеджер пакетов для Node, так что вы не можете использовать менеджер пакетов для установки менеджера пакетов.
Использование npm
Теперь, когда npm установлен, все зарегистрированные пакеты являются просто командой в консоли. Для базовой установки пакета выполните:
$ npm install <пакет>
Таким методом будет установлен пакет в папку node_modules относительно вашего проекта. Порой вам будет нужно установить библиотеки глобально, чтобы вы могли получить к ним доступ из кода любого приложения, не обязательно требуя их как зависимость.
Чтобы сделать это, вам нужно добавить флаг -g в процессе установки:
$ npm install -g <пакет>
В зависимости от того, как Node.js установлен в вашей системе, у вас может не оказаться доступа для установки глобального пакета. Чтобы обойти это, просто добавьте команду sudo в начале:
$ sudo npm install -g <пакет>
Использование npm с проектом
Наиболее распространённым примером использования npm является поддержка манифеста зависимостей для вашего проекта. Всё это хранится в файле package.json .
Вы можете создать этот файл самостоятельно, хотя также есть методы сгенерировать этот файл. В любой папке просто запустите npm init и в консоли вы пройдёте через ряд вопросов, в результате получите что-то вроде такого:
{ "name": "toss-this", "version": "0.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC" }
Если в вашем проекте уже содержится package.json, добавить в него пакет очень легко с помощью npm install. Просто включите флаг --save в команду следующим образом:
$ npm install <пакет> --save
Добавление Grunt в проект обновит package.json, добавив объект dependencies в файл:
{ "name": "toss-this", "version": "0.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC", "dependencies": { "grunt": "^0.4.5" } }
В добавление к этому, если вы хотите указать зависимость только для разработки, а не для рабочего проекта, то передайте флаг -dev:
$ npm install <пакет> --save-dev
Добавив Gulp как зависимость для разработки, в файле package.json появится объект devDependencies:
{ "name": "toss-this", "version": "0.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC", "dependencies": { "grunt": "^0.4.5" }, "devDependencies": { "gulp": "^3.6.2" } }
Узнайте больше о npm
npm удивительно сложная утилита, когда дело доходит до управления пакетами. Смотрите эту шпаргалку по npm для получения дополнительной подробной информации.
Узнайте больше о package.json
package.json содержит много особенностей. Чтобы узнать больше о том, как это всё работает, посетите
JavaScript является неотъемлемой частью веб-разработки. Front-end разработчики используют JavaScript для усовершенствования пользовательского интерфейса, добавление интерактивности, AJAX передачи данных и т.д..
На самом деле при достаточных знаниях JavaScript вы сможете работать с "полным стеком" веб-приложений. Ключ к этому - Node.js, который делает возможность запускать JavaScript на стороне сервера.
Node.js также используется в разработке приложений для настольных компьютеров и средств деплоя (развертывания) приложений, которые делают веб-приложение проще. Например, установив Node.js на свой компьютер, вы сможете быстро конвертировать CoffeeScript в JavaScript, SASS в CSS, а также уменьшить размер вашего HTML, JavaScript и графических файлов.
Кроме установленного Node.js вам также понадобится NPM, который предназначен для установки и управления модулями Node.js. С NPM вы сможете намного проще добавлять много новых и полезных инструментов в ваш проект.
Как работать с Node.js
Node.js не является программой, которую вы просто запускаете нажав по иконке, вы не найдете его на панели задач или в списке приложений. Для использования Node.js вам необходимо выполнять команды (инструкции) в консоле (командной строке), так что будьте готовы к этому.
Установка Node.js
Установка Node.js и NPM довольно проста, все делается с помощью установочного пакета, который можно загрузить с веб-сайта Node.js: .
1. Загрузите установщик для Windows с официального сайта
2. Запустите программу установки
3. Следуйте инструкциям в программе установки
4. Перезагрузите компьютер для корректной работы Node.js
Проверяем корректность установки Node.js и NPM
Для того чтобы убедиться, что все успешно установлено, необходимо выполнить простые команды.
Проверяем Node.js
Для проверки Node.js необходимо открыть командную строку (консоль (Win + R и введите cmd)) и выполнить команду:
Команда вернет текущую версию node.js
Проверяем NPM
Для того, чтобы проверить установлен ли NPM необходимо в командной строке (консоле) выполнить команду:
Команда вернет текущую версию NPM
Пробуем как node.js работает с файлом
Для примера создайте файл test.js со следующим содержанием:
Console.log("Node is installed!");
И в командной строке (консоле) выполните следующую команду:
Node test.js
Как обновить Node.js и NPM
Для установки новых версий Node.js и NPM просто скачайте последнюю версию пакета с официального сайта и запустите ее.
Как удалить Node.js и NPM
Node.js и NPM удаляются так же как и большинство программ в Windows. Т.е. Control Panel => Uninstall a program выбираем Node.js жмем правую кнопку мыши и выбираем Uninstall.
Пакеты Node.js
Так же на сайте NPM () перечислены все официальные пакеты Node.js.
В этом руководстве я расскажу: как установить вебпак (webpack), его зависимости и настроить объединение и минимизацию скриптов через него.
Это первая часть серии "Webpack в NetBeans проекте".
1. Зачем всё это нужно:
1. Уже несколько раз в проектах мне понадобилось из нескольких скриптов объединять в один. Причина такого разделения - каждый скрипт выполняет свою задачу, а для уменьшения http-запросов при релизе плагина (или дополнения к WordPress плагину WP-Recall) - нужно все объединить в один. Руками это делать не хочется.
2. Я люблю комментировать js (не то чтобы маниакально, но в помощь себе - когда вернусь к нему через длительное время), а комментарии в js - это не каменты в php - в скрипте они ложатся мертвым грузом в файле и увеличивают его размер. А этот файл грузится во фронте.
3. Кто-то не хочет чтобы js был прочитан человеком. Ну мало ли... На помощь приходит "Обфуска́ция" (от лат. obfuscare - затенять, затемнять; и англ. obfuscate - делать неочевидным, запутанным, сбивать с толку) - приведение исходного текста или исполняемого кода программы к виду, сохраняющему её функциональность, но затрудняющему анализ, понимание алгоритмов работы и модификацию при декомпиляции.
Идеальное решение:
Пишешь скрипты в разных файлах;
Комментируешь их "от души";
Не скупишься на названия переменным (они должны быть говорящими).
При релизе:
Объединяешь автоматически указанные файлы в один;
Автоматически происходит минимизация (удаление пробелов, переносов и комментариев) - скрипт идет в одну строку;
Автоматически файл обфусцируется - имена переменных сокращаются.
Всё это ведет к снижению веса файла. Что в итоге сказывается на более быстрой загрузке файла.
Посмотрите на пример (все скрины кликабельны):
Результат веса файла ~2 раза
Ну и время "расти дальше" настало. Выбор пал на webpack. Но для того чтобы его поставить придется установить терминал Cygwin в NetBeans (далее: нетбинс, ide), поставить node.js с npm (node package manager) внутри, а затем только поставить сам вебпак.
На этом приключение не закончится - в процессе запуска команды $ npm run build придется доставить webpack-command и webpack-cli - т.к. в терминале вылезет сообщение что их нет. Двинуться без этих пакетов дальше будет нельзя.
2. Глобальные установки и настройки:
В жизни никогда через терминал и командную строку не работал. Всё на кнопочки тыкал. Но тут так не прокатит.
2.1. Ставим Cygwin терминал:
В ide NetBeans есть возможность работы через терминал.
Открываем любой свой проект и вот здесь он находится:
"Сервис" -> "Открыть в терминале"
Откроем терминал
При открытии терминала, ide попросит вас установить его. Вы увидите сообщение вроде этого:
установите Cygwin и перезапустите ide
Cygwin - набор утилит для работы windows через unix команды. Пакет также содержит и терминал.
На эту тему мне интересно решить еще пару-тройку вопросов:
Минимизация и объединение css через webpack;
Автопрефиксы на основе caniuse сервиса;
И конечно же компиляция jsx через babel.
Все конечно же через нетбинс. Поэтому этот урок будем считать первым из серии.
p.s. если вы заметили неточность или опечатку, у вас появились вопросы или вы хотите высказаться по текущей статье - добро пожаловать в комментарии.
Если вы работаете с webpack, но в другой ide - поделитесь своими впечатлениями в комментариях. Если еще не используете, но присматриваетесь - тоже напишите с какой ide вы будете настраивать тесную работу.