Использование npm для установки или обновления необходимых пакетов, таких как bundler for rubygems
Я люблю Bundler, это здорово, в управления зависимостями. Я люблю npm, установка пакетов узлов легко! У меня есть приложение nodejs и хотел бы быть способен указать Мои приложения зависимостей и легко установить / обновить их везде, где я развертывать мое приложение. Это не библиотека, которую я выпускаю, это полноценное веб-приложение.
Я в курсе npm bundle команда, но это, кажется, просто переопределяет каталог, в котором находятся пакеты установленный.
Я привык использовать bundler таким образом:
# Gemfile
gem "rails", "3.0.3"
устанавливает rails v3.0. 3 и любые другие необходимые драгоценные камни на главной машине, только если она еще не существует
> bundle install
как я могу достичь чего-то подобного с npm?
6 ответов:
начиная с npm 1.0 (который теперь является тем, что вы получаете по умолчанию, если выполните шаги в файле README), "bundle" больше не является отдельной вещью-это просто "как это работает".
так:
- поставить
package.jsonфайл в корне вашего проектасписок ваших deps в этом файле
{ "name" : "my-project" , "version" : "1.0.0" , "dependencies" : { "express" : "1.0.0" } }
npm installпоскольку вы вызываете это без args, а не в глобальном режиме, он просто установит все ваши deps в местном масштабе.require("express")и быть счастливым.
изменить: это относится только к версиям npm
это было довольно трудно понять, но NPM делает это возможным.
вам нужно три компонента
- поддиректорию в вашем репозитории (т. е.
deps/)- A
package.jsonфайл в указанном выше каталоге со списком зависимостей- An
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. Вы даже можете сделать эту часть вашего развертывания процесс
cd deps npm installзатем в вашем коде приложения вы можете получить доступ к вашей конкретной версии express следующим образом:
var express = require('myapp_dependencies').express;
вы должны прочитать эти две статьи из блога Isaacs(автор npm). Я думаю, что они действительно хороши, и я считаю, сказать вам, как достичь своей цели:
- http://blog.izs.me/post/1675072029/10-cool-things-you-probably-didnt-realize-npm-could-do
- http://foohack.com/2010/08/intro-to-npm/
Я считаю, что ссылка #1(пункт #11) объясняет это:
11: пакет все ваши зависимости в сам пакет
когда вы используете команды npm пакет, НПМ приложу все зависимостей в папка node_modules в вашем пакете. Но на этом все не заканчивается.
Если вы хотите зависеть от чего-то это не в реестре, вы можете сделать что. Просто сделайте это:
установка пакета npm http://github.com/whoever/whatever/tarball/master Это позволит установить содержание этого смоляной шарик в узелок, а потом вы можно перечислить его как зависимость, и это не будет пытаться установить его, когда ваш пакет будет установлен.
Это также удобно, если у вас есть свой собственная вилка-то, а бы предпочитаю не менять название.
на самом деле, вы можете запустить практически любой НПМ команда в связке. Чтобы посмотреть, что это внутри вы можете сделать npm bundle ls. К удалите что-нибудь, сделайте npm bundle rm вещь. И, конечно же, вы можете установить несколько версий и активировать один вы хотеть.
начиная с версии 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/
мне кажется, что самое простое решение-это использовать С
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в локальной системе, если она еще не существует; работаетnpm publishдает ошибка из-за"private": true.вы и ваша команда можете использовать тег version внутренне для отслеживания изменений зависимостей с течением времени-каждый раз, когда вы изменяете зависимость, поднимите версию. Чтобы узнать, какую версию вы установили, используйте
npm ls installed.
опубликуйте свое приложение с помощью
npmа также, и список его зависимостей в вашем пакете.файл json.когда кто-то использует
npmчтобы установить пакет,npmпозаботится о разрешении своих зависимостей.спецификации пакетов:http://wiki.commonjs.org/wiki/Packages/1.0
Comments