Развертывание Node.js Heroku — не удается выполнить сценарий постустановки для установки Bower

Развертывание моего приложения Node.js MEAN в heroku завершается со следующими ошибками. Я не могу понять, что не так с установкой Bower...

Вот сообщение об ошибке:

2606 info postinstall [email protected]
2607 verbose unsafe-perm in lifecycle true
2608 info [email protected] Failed to exec postinstall script
2609 error [email protected] postinstall: `./node_modules/bower/bin/bower install`
2609 error Exit status 1
2610 error Failed at the [email protected] postinstall script.
2610 error This is most likely a problem with the App package,
2610 error not with npm itself.
2610 error Tell the author that this fails on your system:
2610 error     ./node_modules/bower/bin/bower install
!     Push rejected, failed to compile Node.js app

Вот мой Bower.json

    {
  "name": "mean",
  "version": "1.0.0",
  "dependencies": {
    "bootstrap": "*",
    "angular": "*",
    "angular-resource": "*",
    "angular-cookies": "*",
    "angular-ui-utils": "*",
    "angular-bootstrap": "*",
    "json3": "*",
    "jquery": "*",
    "angular-ui-router": "*",
    "angular-animate": "*",
    "move.js": "git://github.com/visionmedia/move.js.git#~0.3.3",
    "animate.css": "*",
    "ngAnimate-animate.css": "*",
    "angularLocalStorage": "~0.1.7",
    "jquery-nicescroll": "*"
  },
  "resolutions": {
    "angular": "1.2.4"
  }
}

Вот мой Package.json

"scripts": {
    "start": "node node_modules/grunt-cli/bin/grunt",
    "test": "node node_modules/grunt-cli/bin/grunt test",
    "postinstall": "./node_modules/bower/bin/bower install"
},

person ac360    schedule 29.12.2013    source источник
comment
Теперь вам не нужно указывать путь к беседке. Этого достаточно: postinstall : Bower install   -  person wojjas    schedule 21.07.2015


Ответы (5)


Я тоже часто получаю эту ошибку. каждое третье нажатие на heroku терпит неудачу из-за постустановки Bower.

Хотя это не надежное исправление, и я не совсем понимаю, почему оно помогает! но это помогло мне, так что, надеюсь, поможет кому-то еще.

Несмотря на то, что папка /lib добавляется в .gitignore, принудительно добавьте ее перед развертыванием heroku.

git add -f public/lib
git commit -m "force add bower libs"
git push heroku master
person Yuri    schedule 07.01.2014
comment
@JimHall, это каталог, в который я сказал Bower установить все библиотеки. - person Yuri; 28.03.2014
comment
Это сработало, но попахивает взломом. Может ли кто-нибудь предоставить некоторые подробности? Ответ @ibeitia мне не помог. - person reergymerej; 09.04.2014
comment
Сделал трюк, но что, черт возьми, на самом деле происходит? - person JHannes; 30.05.2014
comment
Так что, может быть, я могу пролить свет на это. Это не делает ничего, кроме того, что после установки происходит сбой, а затем используется зарегистрированная (scm) версия зависимостей Bower. Это не использует Bower для настройки продукта. Это даже не настоящий хак, это вопиющее злоупотребление тем, как должны работать Bower/heroku/билды. - person Mutmatt; 01.04.2015
comment
Я бы не стал добавлять в свой репозиторий bower_components (или любые другие сторонние материалы), конечно, это дело вкуса. Вот короткая статья на эту тему: blog.silvabox.com /should-you-commit-bower-components-to-git - person wojjas; 21.07.2015
comment
Я бы никогда не зафиксировал свой каталог Bower в git в обычной ситуации, но здесь мне просто нужно было быстрое решение - person Yuri; 22.07.2015
comment
''npm install bower --save будет решением. установка Bower с помощью npm сначала установит Bower, а позже установит его зависимости (без каких-либо проблем). Я думаю, что добавление всех установленных библиотек Bower не является хорошей практикой. Вышеупомянутое исправление сработало, потому что установленные Bower библиотеки принудительно помещаются в heroku @reergymerej. - person rtvalluri; 31.01.2017

Вероятно, это связано с этой проблемой с Bower, причина которой в настоящее время все еще выясняется:

https://github.com/bower/bower/issues/933

У меня также были некоторые похожие проблемы с ошибкой команды bower install на героку. Вот что сработало для меня:

<сильный>1. Временно удалите node_modules и bower_components из .gitignore.

  • Похоже, это исправило ошибку ENOENT при попытке установить Angular с помощью Bower через постустановочный скрипт в героку.
  • Примечание. Если вы укажете другой каталог установки для компонентов Bower в файле .bowerrc, убедитесь, что этот каталог отсутствует в вашем файле .gitignore.

<сильный>2. Отредактируйте (или создайте) .bowerrc и скажите ему использовать временные каталоги, которые являются локальными по отношению к каталогу проекта:

{
    "storage": {
        "packages": ".bower-cache",
        "registry": ".bower-registry"
    },
    "tmp": ".bower-tmp"
}
  • По умолчанию Bower пытался использовать каталог в /app, что приводило к ENOTEMPTY ошибкам (может быть, потому что он пытался очистить эти каталоги, но не имел доступа, потому что они были доступны другим пользователям? Просто предположил ...)
  • Использование каталога, локального для проекта, устранило конфликты.

Надеюсь, это поможет кому-то еще.

Примечание. Даже после выполнения описанных выше действий команда bower install может время от времени завершаться ошибкой. Однако обычно это работает со второго или третьего раза — просто попробуйте запустить команду еще раз... Пока основная проблема не будет решена, это лучший совет, который я могу предложить.

person Sergey K    schedule 14.01.2014
comment
Добавление папок кэша/временных файлов Bower в файл .gitignore устранило проблему ENOTEMPTY для меня. - person Mark Leusink; 26.03.2014

Я была такая же проблема. Проблема заключалась в том, что в файле bower.json:

{
    "name": "mean",
    "version": "0.1.3",
    "dependencies": {
        "angular": "1.2.8",
        "angular-resource": "latest",
        "angular-cookies": "latest",
        "angular-mocks": "latest",
        "angular-route": "latest",
        "bootstrap": "3.0.3",
        "angular-bootstrap": "0.10.0",
        "angular-ui-utils": "0.1.0"
    }
}

«bower install» не может определить версию angular и требует ручного вмешательства, чтобы выбрать правильную версию:

Unable to find a suitable version for angular, please choose one:
    1) angular#1.2.8 which resolved to 1.2.8 and has mean as dependants
    2) angular#1.2.9 which resolved to 1.2.9 and has angular-cookies#1.2.9, angular-mocks#1.2.9, angular-resource#1.2.9, angular-route#1.2.9 as dependants
    3) angular#>= 1.0.2 which resolved to 1.2.10-build.2176+sha.e020916 and has angular-ui-utils#0.1.0 as dependants
    4) angular#>=1 which resolved to 1.2.10-build.2176+sha.e020916 and has angular-bootstrap#0.10.0 as dependants
Prefix the choice with ! to persist it to bower.json
[?] Answer: 

Таким образом, Heroku терпит неудачу, когда выполняет скрипт.

ИСПРАВИТЬ

Просто измените версию angular в файле bower.json:

"angular": "1.2.10",

1.2.9 тоже будет работать.

person Iñigo Beitia    schedule 27.01.2014
comment
Теперь это кажется логичным. Heroku, вероятно, не может понять эти дополнительные сообщения. Я попробую это сегодня! Ибеития, спасибо :) - person ac360; 27.01.2014

@ac360 ac360 Это вообще не проблема беседки. Как правило, это предупреждение, которое вы можете получить, если разные библиотеки используют одну и ту же зависимость, но другую версию. Вы никогда не должны добавлять свой public/lib to the repo. Это противоречит цели использования беседки. Старайтесь, чтобы репозиторий был как можно более легким, и позволяйте зависимостям загружать и разрешать их во время сборки, чтобы вы могли получать самые последние и лучшие версии в соответствии с параметрами, определенными в вашем bower.json.

Чтобы полностью решить эту проблему для автоматического развертывания, Bower предоставляет нам свойство bower.json под названием resolutions.

Просто создайте следующее в своем bower.json

"resolutions": {
  "ember": "1.2.10"
}

Причина, по которой у вас все еще были проблемы, даже если у вас были определены разрешения, заключалась в том, что выбранная вами версия не собиралась удовлетворять всем зависимостям, поэтому вопрос возник во время установки heroku.

В качестве альтернативы вы можете выполнить сборку локально, и когда вас спросят, какую версию выбрать, если вы предварите выбор числа символом челки !, Bower обновит ваш bower.json для вас!

См.: https://github.com/bower/bower/issues/532.

person KidA78    schedule 16.02.2015

Я заработал, сохранив Bower в package.json с помощью приведенной ниже команды. Сохранение установит Bower с помощью npm на сервере, прежде чем пытаться запустить установку Bower.

npm install bower --save

после этого скрипт постустановки в package.json "postinstall:"bower install" работал на героку.

person princecharmx    schedule 02.09.2016
comment
Это удачное решение - person rtvalluri; 31.01.2017
comment
Да. Работал как шарм - person Murwa; 04.05.2017