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.