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



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



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



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



# Gemfile
gem "rails", "3.0.3"


устанавливает rails v3.0. 3 и любые другие необходимые драгоценные камни на главной машине, только если она еще не существует



> bundle install


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

727   6  

6 ответов:

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

так:

  1. поставить package.json файл в корне вашего проекта
  2. список ваших deps в этом файле

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

  4. require("express") и быть счастливым.

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

это было довольно трудно понять, но NPM делает это возможным.

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

  1. поддиректорию в вашем репозитории (т. е. deps/)
  2. A package.json файл в указанном выше каталоге со списком зависимостей
  3. 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). Я думаю, что они действительно хороши, и я считаю, сказать вам, как достичь своей цели:

  1. http://blog.izs.me/post/1675072029/10-cool-things-you-probably-didnt-realize-npm-could-do
  2. 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

    Ничего не найдено.