将我的Node.js MEAN应用程序部署到heroku失败,出现以下错误。我无法弄清楚凉亭安装有什么问题...
以下是错误消息:
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
这是我的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"
},
答案 0 :(得分:12)
我也犯了这个错误。由于bower postinstall,每三次推送到heroku失败。
虽然这不是一个强有力的解决方案,但我并不完全理解为什么它会有所帮助!但这使我感到困扰,所以希望能帮助别人。
尽管将/ lib文件夹添加到.gitignore,但在部署heroku之前强制添加它
git add -f public/lib
git commit -m "force add bower libs"
git push heroku master
答案 1 :(得分:12)
这可能与凉亭的这个问题有关,其原因目前仍在调查中:
https://github.com/bower/bower/issues/933
我也遇到过类似问题bower install
命令在heroku上失败了。这对我有用:
<强> 1。暂时从node_modules
删除bower_components
和.gitignore
。
ENOENT
错误。.bowerrc
文件中的bower组件指定了不同的安装目录,请确保.gitignore
中的目录不。 <强> 2。编辑(或创建).bowerrc
并告诉它使用项目目录本地的临时目录:
{ "storage": { "packages": ".bower-cache", "registry": ".bower-registry" }, "tmp": ".bower-tmp" }
/app
中的目录,这导致ENOTEMPTY
错误(可能是因为它试图清除这些目录,但它没有访问权限,因为它们与其他用户共享?只是猜不出......)希望这有助于其他人。
注意:即使执行了上述步骤,bower install
命令仍可能偶尔失败。但是,它通常可以在第二次或第三次运行 - 只需再次尝试运行命令......直到底层问题得到解决,这是我能提供的最佳建议。
答案 2 :(得分:6)
我有同样的问题。问题出在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”无法确定角度版本,需要手动干预才能选择正确的版本:
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在执行脚本时失败。
<强> FIX 强>
只需更改bower.json
文件中的角度版本:
"angular": "1.2.10",
1.2.9
也可以。
答案 3 :(得分:4)
@ ac360这根本不是凉亭的问题。如果不同的库使用相同的依赖关系(不同版本),通常会发出警告。您永远不应该添加public/lib to the repo
。这违背了凉亭的用途。让您的repo尽可能轻松,让依赖项在构建时下载并解析,这样您就可以在bower.json
要完全解决此问题以进行自动部署,bower会在名为bower.json
的{{1}}上为我们提供一个属性
只需在resolutions
bower.json
即使您已经定义了解决方案,您仍然遇到问题的原因是因为您选择的版本不会满足所有依赖项,因此在heroku安装期间出现了问题。
或者,您可以在本地构建,当您被问到可供选择的版本时,如果您在数字选项之前加上bang "resolutions": {
"ember": "1.2.10"
}
符号,bower将为您更新bower.json!
答案 4 :(得分:3)
我通过确保使用以下命令在package.json中保存bower来实现它。在尝试运行bower install
之前,save将在服务器上使用npm安装bowernpm install bower --save
package.json中的postinstall脚本 “postinstall:”bower install“之后在heroku工作。