Подтвердить что ты не робот

Использование npm для установки или обновления необходимых пакетов, таких как bundler для rubygems

Мне нравится Bundler, это отлично подходит для управления зависимостями. Мне нравится npm, установка пакетов node проста! У меня есть приложение nodejs, и мне бы хотелось, чтобы мог указать зависимости приложений и легко устанавливать/обновлять их, где бы я ни развертывал свое приложение. Это не библиотека, которую я выпускаю, это полноценное веб-приложение.

Я знаю команду npm bundle, но это просто просто переопределяет каталог, в котором установлены пакеты.

Я использую bundler таким образом:

# Gemfile
gem "rails", "3.0.3"

Устанавливает рельсы v3.0.3 и любые другие требуемые драгоценные камни на хост-машине, только если она еще не существует

> bundle install

Как я могу добиться чего-то подобного с npm?

4b9b3361

Ответ 1

Начиная с npm 1.0 (теперь это то, что вы получаете по умолчанию, если выполняете шаги в файле README), "bundle" больше не является разделенным - это просто "как это работает".

Итак:

  • Поместите файл package.json в корень вашего проекта
  • Список ваших отпечатков в этом файле

    { "name" : "my-project"
    , "version" : "1.0.0"
    , "dependencies" : { "express" : "1.0.0" } }
    
  • npm install Так как вы вызываете это без аргументов, а не в глобальном режиме, он просто устанавливает все ваши депики локально.

  • require("express") и будьте счастливы.

Ответ 2

Изменить: это относится только к версиям npm < 1.0


Было сложно понять это, но NPM делает это возможным.

Вам нужны три компонента

  • Подкаталог в вашем репозитории (т.е. deps/)
  • Файл package.json в приведенном выше каталоге, в котором перечислены зависимости
  • Файл index.js в приведенном выше каталоге, который требует ваших зависимостей

Пример

Представьте, что express - ваша единственная зависимость

Deps/package.json

Примечание. Увеличьте версию # при каждом изменении зависимостей

{
  "name": "myapp_dependencies",
  "version": "0.0.1",
  "engines": {
    "node": "0.4.1"
  },
  "dependencies":{
    "express": "2.0.0beta2"
  }
}

Deps/index.js

export.modules = {
  express: require('express')
  //add more
}

Теперь вы можете установить свои зависимости с помощью npm. Вы даже можете сделать эту часть процесса развертывания

cd deps
npm install

Затем в коде приложения вы можете получить доступ к вашей конкретной версии выражения следующим образом:

var express = require('myapp_dependencies').express;

Ответ 3

Вы должны прочитать эти две статьи из блога Isaacs (author npm). Я думаю, что они действительно хороши, и я верю, что расскажу вам, как достичь своей цели:

Я считаю, что ссылка # 1 (точка № 11) объясняет это:

11: Свяжите все ваши зависимости в самом пакете

Когда вы используете команда npm bundle, npm поместит все ваши зависимости в node_modules в вашем пакете. Но он не останавливается на достигнутом.

Если вы хотите зависеть от чего-то это не в реестре, вы можете сделать что. Просто сделайте следующее:

Установка пакета npm http://github.com/whoever/whatever/tarball/masterЭто установит содержимое этого tarball в комплект, а затем вы может перечислить его как зависимость, и это не пытайтесь установить его, когда ваш пакет устанавливается.

Это также удобно, если у вас есть что-то, и предпочитают не менять имя.

Фактически, вы можете запускать почти любую npm команды в комплекте. Чтобы узнать, что внутри, вы можете сделать npm bundle ls. к удалите что-нибудь, сделайте npm bundle rm вещь. И, конечно, вы можете установить несколько версий и активировать вы хотите.

Ответ 4

Мне кажется, что самым простым решением является использование файла package.json с флагом private (добавленным к номеру в минуту только в прошлом месяце), установленным в true. Таким образом, вы можете запустить npm install или npm bundle, чтобы захватить зависимости проекта, но вы не позволили кому-либо случайно опубликовать ваш непубличный проект.

Вот пример package.json:

{
"name": "yourProject"
,"version": "1.0.0"
,"dependencies": { "express" : ">=2.1.0" }
,"private": true
}

Запуск npm install будет устанавливать express в локальной системе, если он еще не существует; запуск npm publish дает ошибку из-за "private": true.

Вы и ваша команда можете использовать тег версии внутри, чтобы отслеживать изменения зависимостей с течением времени - каждый раз, когда вы изменяете зависимость, ударяйте версию. Чтобы узнать, какая версия была установлена, используйте npm ls installed.

Ответ 5

В версии Npm версии 1.1.2 появилась новая команда npm shrinkwrap, которая создает файл npm-shrinkwrapped.json, аналогичный Gemfile.lock, Важно сделать это, чтобы предотвратить сбой программного обеспечения (см. Объяснение Бундлера). В частности, у Nodejs есть такое быстро развивающееся сообщество.

Пока bundle install автоматически создает Gemfile.lock, npm install не создает npm-shrinkwrapped.json (но будет использовать его, когда он существует). Поэтому вам нужно запомнить npm shrinkwrap.

Прочитайте полный справочник по http://blog.nodejs.org/2012/02/27/managing-node-js-dependencies-with-shrinkwrap/

Ответ 6

Опубликуйте приложение с помощью npm, а также укажите его зависимости в файле package.json.

Когда кто-то использует npm для установки вашего пакета, npm позаботится о разрешении его зависимостей.

Спецификация пакетов: http://wiki.commonjs.org/wiki/Packages/1.0