Node.js Развертывание Heroku - не удается выполнить Exec Postinstall Script Для установки Bower
Развертывание моего приложения Node.js MEAN для heroku не выполняется со следующими ошибками. Я не могу понять, что не так с установкой беседки...
Вот сообщение об ошибке:
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"
},
Ответы
Ответ 1
Я тоже получаю эту ошибку. каждый третий толчок к героике терпит неудачу из-за bower postinstall.
Хотя это не надежное решение, и я не совсем понимаю, почему это помогает! но это помогло мне, поэтому, надеюсь, поможет кому-то другому.
Несмотря на то, что папка /lib добавляется в .gitignore, добавьте ее перед развертыванием heroku
git add -f public/lib
git commit -m "force add bower libs"
git push heroku master
Ответ 2
Вероятно, это связано с этой проблемой с беседкой, причина которой в настоящее время еще исследуется:
https://github.com/bower/bower/issues/933
У меня также были некоторые аналогичные проблемы с командой bower install
, которая не срабатывала на heroku. Вот то, что сработало для меня:
1. Временно удалите node_modules
и bower_components
из .gitignore
.
- Похоже, что при попытке установить Angular при помощи bower через postinstall script в heroku исправлена ошибка
ENOENT
.
- Примечание. Если вы укажете другой каталог установки компонентов bower в вашем файле
.bowerrc
, убедитесь, что каталог отсутствует в вашем .gitignore
.
2. Измените (или создайте) .bowerrc
и скажите ему использовать временные каталоги, которые являются локальными для каталога проекта:
{
"storage": {
"packages": ".bower-cache",
"registry": ".bower-registry"
},
"tmp": ".bower-tmp"
}
- По умолчанию, bower пыталась использовать каталог в
/app
, что приводило к ошибкам ENOTEMPTY
(возможно, потому, что пыталось очистить эти каталоги, но у него не было доступа, потому что они были совместно с другими пользователей? Просто выкидывать предположение...)
- Использование каталога, локального для проекта, устраняет конфликты.
Надеюсь, это поможет кому-то еще.
Примечание. Даже после выполнения вышеописанных шагов команда bower install
может иногда выходить из строя. Однако он обычно работает второй или третий раз - просто попробуйте снова запустить команду... Пока основная проблема не будет решена, это лучший совет, который я могу предложить.
Ответ 3
У меня была такая же проблема. Проблема заключалась в том, что в файле 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 терпит неудачу, когда он выполняет script.
FIX
Просто измените версию angular в файле bower.json
:
"angular": "1.2.10",
1.2.9
также будет работать.
Ответ 4
@ac360 Это не проблема с беседкой вообще. Обычно это предупреждение, которое можно получить, если разные библиотеки используют одну и ту же зависимость, но другую версию. Вы никогда не должны добавлять свой public/lib to the repo
. Это побеждает цель того, для чего может использоваться колокольчик. Держите свое репо как можно более легким, и пусть зависимости загружаются и разрешаются во время сборки, поэтому вы можете получить последние и самые большие значения в параметрах, определенных в bower.json
Чтобы решить эту проблему полностью для автоматического развертывания, bower дает нам свойство на bower.json
, называемом resolutions
Просто создайте в своем bower.json
следующее:
"resolutions": {
"ember": "1.2.10"
}
Причина, по которой у вас все еще были проблемы, даже если у вас были определенные разрешения, потому что выбранная вами версия не собиралась удовлетворять всем зависимостям, поэтому вопрос возник во время установки heroku.
В качестве альтернативы вы можете создавать локально, и когда вас спросят, какую версию выбрать, если вы превзошли выбор номера с помощью символа bang !
, bower обновит ваш bower.json для вас!
Смотрите: https://github.com/bower/bower/issues/532
Ответ 5
Я заработал, обеспечив сохранение bower в package.json, используя приведенную ниже команду. Сохранение установит беседу с использованием npm на сервере, прежде чем пытаться запустить установку bower
npm install bower --save
postinstall script в package.json
"postinstall:" bower install "после этого работал над heroku.