Я люблю Bundler , он отлично справляется с управлением зависимостями. Я люблю npm , устанавливать пакеты узлов очень просто! У меня есть приложение nodejs, и я хотел бы иметь возможность указывать зависимости моих приложений и легко устанавливать / обновлять их везде, где я развертываю свое приложение. Это не библиотека, которую я выпускаю, это полноценное веб-приложение.
Я знаю эту npm bundle
команду, но она просто переопределяет каталог, в котором установлены пакеты.
Я привык использовать бандлер таким образом:
# Gemfile
gem "rails", "3.0.3"
Устанавливает rails v3.0.3 и любые другие необходимые драгоценные камни на хост-машину, только если они еще не существуют
> bundle install
Как я могу добиться чего-то подобного с помощью npm?
javascript
dependencies
node.js
bundler
npm
Дэниел Бердсли
источник
источник
Ответы:
Начиная с npm 1.0 (который теперь вы получаете по умолчанию, если следуете инструкциям в файле README), «пакет» больше не является изолированной вещью - это просто «как это работает».
Так:
package.json
файл в корень вашего проектаПеречислите свои данные в этом файле
{ "name" : "my-project" , "version" : "1.0.0" , "dependencies" : { "express" : "1.0.0" } }
npm install
Поскольку вы вызываете это без аргументов и не в глобальном режиме, он просто установит все ваши депы локально.require("express")
и будь счастлив.источник
your_app/node_modules
каталог на символическую ссылку вне каталога вашего приложения. Вам не нужно загружать, собирать и устанавливать каждую зависимость при каждом развертывании.my-project
в./node_modules/my-project/node_modules
. Я не уверен, есть ли удобный способ установить все зависимости в./node_modules
Anyone?Изменить: это относится только к версиям npm <1.0
Разобраться в этом было довольно сложно, но NPM делает это возможным .
Вам нужно три компонента
deps/
)package.json
Файл в каталоге выше , что списки зависимостиindex.js
Файл в каталоге выше , что требует вашего зависимостейпример
Представьте, что экспресс - ваша единственная зависимость
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. Вы даже можете сделать эту часть процесса развертывания
Затем в коде вашего приложения вы можете получить доступ к вашей конкретной версии Express следующим образом:
var express = require('myapp_dependencies').express;
источник
require('express')
в deps / index.js просто импортировать последнюю экспресс-версию, и не обязательно ту, которую мы установили? Я новичок в NodeJS, так что терпите меня.npm install
, это добавляет символические ссылки в каталог вашего установленного пакета на правильные версии зависимых пакетов. Когда требуется пакет зависимостей,require('express')
сначала проверяется локальный каталог и обнаруживается символическая ссылка на правильную версию express.Вам следует прочитать эти две статьи из блога Isaacs (автор npm). Я считаю, что они действительно хороши, и я считаю, что они расскажут вам, как достичь своей цели:
Я считаю, что ссылка №1 (пункт №11) объясняет это:
источник
npm bundle
он используется для сбора всех ваших зависимостей в определенный каталог, отличный от каталога по умолчанию. Я, вероятно, предложу свое собственное решение, которое работает аналогичноbundle install
(bundler
для рубина)npm
версии 1.0+,npm bundle
было удалено. Вместо этого просто используйтеnpm install
команду без имени пакета, она прочитает package.json и загрузит необходимые пакеты.Начиная с версии Npm 1.1.2, есть новая команда,
npm shrinkwrap
которая создаетnpm-shrinkwrapped.json
файл, аналогичныйGemfile.lock
. Его важно сделать, чтобы предотвратить гниение программного обеспечения (см. Обоснование Bundler ). Тем более, что у 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/
источник
Мне кажется, что самое простое решение - использовать
package.json
файл с установленнымprivate
флагом (добавленным в npm только в прошлом месяце)true
. Таким образом, вы можете запуститьnpm install
илиnpm bundle
получить зависимости вашего проекта, но вы предотвратите случайную публикацию вашего непубличного проекта кем-либо.Вот пример
package.json
:{ "name": "yourProject" ,"version": "1.0.0" ,"dependencies": { "express" : ">=2.1.0" } ,"private": true }
Запуск
npm install
будет установленexpress
в локальной системе, если она еще не существует; runningnpm publish
выдает ошибку из-за"private": true
.Вы и ваша команда можете использовать тег версии для внутреннего использования, чтобы отслеживать изменения зависимостей с течением времени - каждый раз, когда вы меняете зависимость, повышайте версию. Чтобы узнать, какую версию вы установили, используйте
npm ls installed
.источник
true
и что это работает только потому, что строки являются истинными значениями (то есть!!"false" === true
).Также опубликуйте приложение
npm
и укажите его зависимости в файле package.json.Когда кто-то использует
npm
для установки вашего пакета,npm
он позаботится о разрешении его зависимостей.Спецификация пакетов: http://wiki.commonjs.org/wiki/Packages/1.0
источник
npm
для установки перед установкой вашего приложения. Я не думаю, что есть другойgem
эквивалент для node.js.