Как указать версию npm при развертывании приложений nodejs в bluemix?

Я создал приложение node.js с зависимостями времени выполнения от пакетов с областью действия в моем package.json:

"dependencies": {
    "@shawnzhu/mybot" : "latest",
    ...
},
"engines": {
    "npm": ">2.0.0",
    "node": "0.10.38"
},

У меня также есть пользовательский .npmrc, который указывает область @shawnzhu на мой частный реестр npm.

В настоящее время он работает при развертывании на героку, где он обновляет npm до версии 2.7.x. Однако cf push в bluemix завершается ошибкой, вывод консоли показывает:

registry "@shawnzhu/mybot" not found.

Изучив весь вывод консоли, я понял, что он использует npm v1.4.28, который не поддерживает пакеты с заданной областью действия.

Как я могу получить npm v2.0.0+ в приложении node.js в bluemix?


person shawnzhu    schedule 04.05.2015    source источник


Ответы (3)


До 15 июня 2015 г. это было невозможно при использовании пакета сборки Node.js по умолчанию в Bluemix. На данный момент вы можете использовать пакет сборки Node.js с открытым исходным кодом:

cf push mynodeapp -b https://github.com/cloudfoundry/nodejs-buildpack

Вы правильно указали версию npm в package.json, поэтому она должна работать для пакета сборки сообщества.

После 15 июня 2015 г. новейшая версия IBM Node.js Buildpack теперь доступна в Bluemix! Вы можете увидеть полные изменения по адресу https://developer.ibm.com/bluemix/2015/06/15/bluemix-node-js-buildpack-update/

В этом пакете сборки есть возможность указать версии NPM, включив запись npm в ваш package.json, например:

"engines": {
    "npm": "xxxxxxx"
},
person Sai Vennam    schedule 04.05.2015
comment
да, именно поэтому я сказал, что это работает на героку через пакет сборки героку. - person shawnzhu; 05.05.2015

Я также смог заставить это работать, используя Node 0.12.2 со следующими изменениями:

В package.json:

  "engines": {
    "npm": ">2.0.0",
    "node": ">=0.12.0"
  },
person ann.marie.99    schedule 05.05.2015
comment
Да, у меня работает получение пакетов с ограниченной областью действия в bluemix! Спасибо! - person shawnzhu; 05.05.2015
comment
Примечательно, что это все еще работает. Более современный пример: двигатели: {npm: ›=6,14, node: ›=12,22}, - person ann.marie.99; 08.05.2021

Начиная с последнего пакета сборки Bluemix node.js по умолчанию (около 4 июня 2015 г.), вы можете указать версию npm > 2.0.0, которая устанавливает версию npm > 2.7, что является требованием для поддержки и импорта npm с заданной областью действия. пакеты. Я протестировал это для общедоступного пакета, и он запущен и работает в производстве в Bluemix с использованием пакета сборки node.js по умолчанию.

Если вы не хотите возвращаться и использовать сборочный пакет сообщества cf, вы можете использовать свойство «engines.npm», и это должно помочь вам начать работу даже в узле 0.10.x.

В package.json укажите:

 "engines": {
    "npm": ">2.0.0",
    "node": "0.10.x"
  }

Я отредактировал этот ответ для ясности. Большое спасибо @shawnzhu за комментарии. Надеюсь это поможет.

person novaedge    schedule 04.06.2015
comment
эта функция принадлежит пакету сборки Bluemix по умолчанию node.js, я хочу знать, какое изменение в пакете сборки nodejs по умолчанию добавляет эту функцию, вместо того, чтобы говорить, что она работает только сейчас. - person shawnzhu; 05.06.2015
comment
@shawnzhu, я обновил свой ответ для ясности. Похоже, что функции стандартного пакета сборки Bluemix node.js теперь поддерживают указание engine.npm > 2.0, и теперь можно использовать пакеты npm с ограниченной областью действия. Я не уверен, что они изменили, но я добавил свой ответ здесь, потому что ответ от sai-vennam выше кажется уже устаревшим. - person novaedge; 09.06.2015
comment
сегодня это не работает, и @Sai Vennam упомянул, что текущая производственная версия пакета сборки Node.js для bluemix — v1.18-20150519-1759, которая еще не поддерживает эту функцию. повторно принять его ответ. и я буду следить за этим - person shawnzhu; 10.06.2015