Мне нравится Bundler, это отлично подходит для управления зависимостями. Мне нравится npm, установка пакетов node проста! У меня есть приложение nodejs, и мне бы хотелось, чтобы мог указать зависимости приложений и легко устанавливать/обновлять их, где бы я ни развертывал свое приложение. Это не библиотека, которую я выпускаю, это полноценное веб-приложение.
Я знаю команду npm bundle
, но это просто просто переопределяет каталог, в котором установлены пакеты.
Я использую bundler таким образом:
# Gemfile
gem "rails", "3.0.3"
Устанавливает рельсы v3.0.3 и любые другие требуемые драгоценные камни на хост-машине, только если она еще не существует
> bundle install
Как я могу добиться чего-то подобного с npm?
Ответ 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