Пользователь
0,0
рейтинг
25 ноября 2011 в 13:53

Разработка → Шпаргалка по пакетному менеджеру NPM перевод


npm — это пакетный менеджер node.js. С его помощью можно управлять модулями и зависимостями.
Небольшая шпаргалка всех моих любимых команд npm:


Установка npm


curl https://npmjs.org/install.sh | sh


Обновление 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.js

test.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.<anonymous> (/Users/maraksquires/dev/nodeapps/anotherapp/test.js:1:80)
    at Module._compile (module.js:411:26)
    at Object..js (module.js:417:10)
    at Module.load (module.js:343:31)
    at Function._load (module.js:302:12)
    at Array.<anonymous> (module.js:430:10)
    at EventEmitter._tickCallback (node.js:126:26)

Это вполне логично, мы установили 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 http-server@0.3.0


Установка модуля с Github


Важно. В некоторых случаях будут патчи, форки или ветви, которые вы хотите использовать, но которые еще не были опубликованы в npm. К счастью исходные коды для большинства npm модулей также доступна на www.github.com
git 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» для этого приложения)

Отмена связи пакета в системе


cd http-server/
npm unlink

(здесь мы отменяем наш «copy» для этого пакета)

Создание нового пакета


mkdir mypackage/
cd mypackage/
npm init

(от себя хочу лишь заметить, что создание пакета не такая простая задача в одну команду, подробнее можно почитать в другой статье)

Добавление нового пользователя


npm adduser


Публикация пакета в репозиторий npm


cd mypackage/
npm publish


Удаление пакета из репозитория npm


npm unpublish http-server


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


Вы можете задать права доступа других пользователей к опубликованному пакету:
npm owner add marak http-server
npm owner rm marak http-server
npm owner ls http-server


За дополнительной информацией о формате package.json и обо всех тонкостях работы с npm вы можете ознакомится в статье Charlie Robbin's: blog.nodejitsu.com/package-dependencies-done-right
Перевод: Marak Squires
Иван @InteractiveTechnology
карма
22,7
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (10)

  • –1
    А как поменять папку установки локальных пакетов? Хочется сделать её скрытой, а то глаза мозолит…
    • 0
      Для глобального точно можно задать через $NODE_PATH, а вот для локального не нашёл не в доках npm, не в доках nodejs. Очевидно данный путь привязан в коде. Но никто не мешает после переименовать папку и использовать в require относительный или полный путь до модулей.
  • +2
    > Установка npm

    Будет нелишним упомянуть, что npm ставится вместе с node c версии 0.6.3.
  • 0
    Так как всеже правильно сделать upgrade node с помощью npm?
    • 0
      node не обновляется через npm, т.к. это 2 разные вещи. npm — пакетный менеджер и отвечает только за модули для node, а сама node ставиться например из ppa репозитория или например из исходников с gihub. Подробнее всё есть на специальной страницы вики: github.com/joyent/node/wiki/Installation
      • 0
        Да, спасибо, оговорился, хотел спросить как же тогда делать update для пакетов, вернее в статье команды update то нет почему-то.
  • 0
    А я даже npm установить не могу.

    # curl npmjs.org/install.sh | sh
    % Total % Received % Xferd Average Speed Time Time Time Current
    Dload Upload Total Spent Left Speed
    193 193 193 193 0 0 242 0 --:--:-- --:--:-- --:--:-- 1048
    sh: line 1: html: No such file or directory
    sh: line 2: syntax error near unexpected token `
    • 0
      Только что поставился этой командой:
      curl https://www.npmjs.org/install.sh | sudo sh
      

      Подсмотрел тут: How do I update npm?
  • 0
    NPM умеет следить за зависимостями? При установке по командам, указанным в статье, в каждом пакете содержатся все его зависимости, даже если они уже установлены в других пакетах. Одни и те же зависимости даже встречаются по несколько раз в одном пакете. В результате пакеты, выполняющие простые задачи, весят десятки мегабайт.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.