Deployment of my Node.js MEAN app to heroku fails with the following errors. I can't figure out what is wrong with the bower install...
Here is the error message:
2606 info postinstall App@1.0.0
2607 verbose unsafe-perm in lifecycle true
2608 info App@1.0.0 Failed to exec postinstall script
2609 error App@1.0.0 postinstall: `./node_modules/bower/bin/bower install`
2609 error Exit status 1
2610 error Failed at the App@1.0.0 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
Here is my 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"
}
}
Here is my 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"
},
I get this error a lot too. every third push to heroku fails because of bower postinstall.
While this is not a robust fix, and I don't fully understand why it helps! but this hepled me, so hopefully will help someone else.
Despite /lib folder is being added to .gitignore, force add it before deploying heroku
I had the same issue. The problem was that in the
bower.json
file:"bower install" is unable to determine the angular version and requires manual intervention to choose the right version:
So Heroku fails when it executes the script.
FIX
Just change the version of angular in your
bower.json
file:1.2.9
will also work.This is likely related to this issue with bower, the cause of which is currently still being investigated:
https://github.com/bower/bower/issues/933
I've also been having some similar issues with the
bower install
command failing on heroku. Here's what worked for me:1. Temporarily remove
node_modules
andbower_components
from.gitignore
.ENOENT
error when trying to install Angular using bower through a postinstall script in heroku..bowerrc
file, then make sure that directory is not present in your.gitignore
.2. Edit (or create)
.bowerrc
and tell it to use temp directories that are local to the project directory:/app
, which was resulting inENOTEMPTY
errors (maybe because it was trying to clear those directories, but it didn't have access because they are shared with other users? Just throwing out a guess...)Hope this helps someone else.
Note: Even after performing the above steps, the
bower install
command may still occasionally fail. However, it generally works the second or third time - just try running the command again... Until the underlying issue is resolved, that's the best advice that I can offer.@ac360 This isn't an issue with bower at all. It's generally a warning you can get if different libraries use the same dependency however a different version. You should never add your
public/lib to the repo
. That defeats the purpose of what bower can be used for. Keep your repo as light as possible, and let dependencies download and resolve at build time so you can get the latest and greatest within the parameters defined in yourbower.json
To resolve this issue completely for auto-deploys, bower gives us a property on the
bower.json
calledresolutions
Simply create the following in your
bower.json
The reason you still had problems even if you had resolutions defined was because the version you picked wasn't going to satisfy all dependencies so the question came up during the heroku install.
Alternatively, you can build locally, and when you are asked which version to choose from, if you preceed the number choice with the bang
!
symbol, bower will update your bower.json for you!See: https://github.com/bower/bower/issues/532
I got it working by ensuring to save bower in package.json using the command below. The save will install bower using npm on server before attempting to run bower install
the postinstall script in package.json "postinstall:"bower install" worked on heroku after that.