激活
应用的根目录下必须有 package.json
文件,如果不存在请使用 npm init
命令创建并配置需要的依赖和其它信息。
监听端口
应用需要监听 PORT
或 VCAP_APP_PORT
环境变量指定的端口,参考代码:
app.listen(process.env.PORT || 3000);
运行时
Node 的版本遵循 SemVer 规范,SemVer 是一种由 github 推广开的语义化 版本控制规范,使用 MAJOR.MINOR.PATCH 形式的版本控制方案:
- MAJOR 更改不兼容的 API
- MINOR 向后兼容的方式增加功能
- PATCH 向后兼容的方式修复 bug
Node 的版本策略是从 Linux 学来的,其中偶数的 MINOR 版本号表示稳定的发布。以下是 node 版本的一些例子:
- 0.8.x: 稳定
- 0.9.x: 不稳定
- 0.10.x: 稳定
- 0.11.x: 不稳定
当前支持 0.10.x
和 0.8.x
两个版本,在 package.json
里使用 engines
指定版本:
{
"name": "myapp",
"description": "a really cool app",
"version": "0.0.1",
"engines": {"node": "0.10.x"}
}
0.8.5
之后的版本包括 0.11.13
也是支持的,以下是使用 0.11.x
版本的例子:
{
"engines": {"node": "0.11.x"}
}
提示:不需要指定 npm 版本,因为 npm 是跟 node 绑定的。
环境变量
以下的环境变量会被设置,NODE_ENV
环境变量默认是没有设置的,你可以手动添加:
PATH=vendor/node/bin:bin:node_modules/.bin:$PATH
自定义构建
如果你的应用在构建时需要执行额外的操作,可以 在 package.json
的 scripts
节点下添加 postinstall
脚本,该脚本会在 buildpack
执行完 npm install --production
后自动执行,package.json
示例:
{
"name": "node-hello",
"version": "0.0.1",
"description": "nodejs demo",
"dependencies" : {
"bower": "~1.3.9",
"grunt-cli": "~0.1.13",
},
"scripts": {
"start": "node index.js",
"test": "mocha",
"postinstall": "bower install && grunt build"
},
"engines": {
"node": ">=0.10"
}
}
注意: 系统默认不自带 grunt/gulp/bower
这些工具,而且只会安装 package.json
中 dependencies
节点下的依赖,所以自定义执行的命令也需要作为依赖添加到此节点下,否则可能会找不到命令,这些工具执行时需要的依赖也是如此。
我们推荐在本地编译好静态文件再上传到服务器部署,而不是在服务器端做!
因为服务器端可能会缺少某些包依赖的外部环境而无法执行某些 grunt 任务,比如:grunt-contrib-compass
和 grunt-contrib-sass
都是依赖外部的 Ruby 命令行工具的,但是平台的 nodejs
环境里是没有这些工具的。
启动命令
Procfile
文件不是必须的,系统会检查 package.json
里的 scripts.start
项,如果存在, 系统会自动创建 Procfile
,参考上一节里 package.json
示例里的 scripts.start
脚本。
否则,用户需要自行创建 Procfile
来指定应用启动命令,如:
web: node app.js
Resource Reference
PATH=vendor/node/bin:bin:node_modules/.bin:$PATH