由于课程设计需要把网站发布到heroku上,今天试着把以前用angularJs开发的一个前端应用部署上去,在部署的过程中遇到几个注意点,在此进行记录。
package.json中需要指定node的版本
本地开发node运行时是通过系统环境变量找到的,因此不需指定版本,但部署到heroku上时,由于heroku需要根据版本号去下载对应版本的nodejs,因此必须指明node的版本,个人感觉可能heroku的部署原理类似于Docker,官方的文档在Heroku Node.js Support
package.json中的配置如下:
"engines": {
"node": "4.4.0",
"npm": "2.1.x" //npm 的版本不需指明,可选
},
开发依赖项要放入dependencies中,如bower, http-server等
我在前端项目中用到了bower包管理器,主要管理一些前端框架,如Jquery,Bootstrap等,因此我的页面能够正常访问的前提是bower install能够正常执行,但由于我开发时将bower放在了package.json中的devDependecies中,因此在部署到heroku上后,它在npm install时默认忽略了devDependecies中的内容,包括bower,因此导致页面无法访问,配置如下:
"dependencies": {
"karma": "^0.13.21",
"karma-chrome-launcher": "^0.1.4",
"karma-firefox-launcher": "^0.1.3",
"karma-jasmine": "~0.1.0",
"protractor": "^2.1.0",
"http-server": "^0.9.0",
"tmp": "0.0.23",
"bower": "^1.3.1",
"shelljs": "^0.2.6"
},
官方文档在这里Troubleshooting Node.js Deploys
启动http服务器时,指定的端口应使用$PORT
$PORT应该是heroku指定的一个发布网页应用的端口,其他端口不可用
,官方的文档说明在这里Runtime Principles