一、准备工作

在此步骤中,您将准备一个可以部署的简单应用程序,至少需要满足前3个条件:

  • 本地可以正常运行部署的Nodejs程序
  • 项目可以托管到git仓库
  • 项目根目录下必须存在package.json,用来管理Nodejs项目的依赖,也是Rainbond识别为Nodejs语言的必要条件
  • 项目根目录下需要定义Procfile,用来定义程序启动方式
    示例: Node.js示例代码

二、代码识别

代码的根目录下必须有package.json文件,如果不存在请手动或使用 npm init 命令创建并配置需要的依赖和其它信息。

三、版本支持

默认当前支持的版本

  1. 0.10.9 0.11.9 0.12.9 10.13.0 11.1.0 4.9.1 5.12.0 6.14.4 7.10.1 8.12.0 9.11.2

您可以在 package.json 里使用 engines 指定版本:

copy



# icon/buttons/copy

  1. {
  2. "name": "myapp",
  3. "description": "a really cool app",
  4. "version": "0.0.1",
  5. "engines": {
  6. "node": "4.8.7"
  7. }
  8. }

0.8.5 之后的版本包括 0.11.13 也是支持的,以下是使用 0.11.x 版本的例子:

copy



# icon/buttons/copy

  1. {
  2. "engines": {
  3. "node": "0.11.x"
  4. }
  5. }

提示:

npm 版本不是必须的,可以省略,因为 npm 是跟 node 绑定的。

四、环境变量

系统会设置以下的环境变量,NODE_ENV环境变量默认是 production。

  1. # 默认 NODE_ENV 是 production
  2. export NODE_ENV=${NODE_ENV:-production}
  3. # 添加node的二进制文件目录到PATH
  4. PATH=vendor/node/bin:bin:node_modules/.bin:$PATH

五、自定义构建

如果您的应用在构建时需要执行额外的操作,可以在 package.jsonscripts 节点下添加 postinstall脚本,该脚本会在 buildpack 执行完 npm install —production 后自动执行,可参考package.json 示例:

copy



# icon/buttons/copy

  1. {
  2. "name": "node-hello",
  3. "version": "0.0.1",
  4. "description": "nodejs demo",
  5. "dependencies" : {
  6. "bower": "~1.3.9",
  7. "grunt-cli": "~0.1.13",
  8. },
  9. "scripts": {
  10. "start": "node index.js",
  11. "test": "mocha",
  12. "postinstall": "bower install && grunt build"
  13. },
  14. "engines": {
  15. "node": "9.3.0"
  16. }
  17. }

注意:

系统默认不自带 grunt、gulp、bower 这些工具,而且只会安装 package.jsondependencies 节点下的依赖,所以自定义执行的命令也需要作为依赖添加到此节点下,否则可能会找不到命令,这些工具执行时需要的依赖也是如此。

我们 推荐 在本地编译好静态文件再上传到服务器部署,而不是在服务器端.因为服务器端可能会缺少某些包依赖的外部环境而无法执行某些 grunt 任务,比如:grunt-contrib-compassgrunt-contrib-sass 都是依赖外部的 Ruby 命令行工具的,但是平台的 node.js 环境里是没有这些工具的。

五、配置启动命令

Procfile 文件不是必须的,系统会检查 package.json 里的 scripts.start 项,如果存在,系统会使用 scripts.start 里的命令做为启动命令,参考上一节里 package.json 示例里的 scripts.start 脚本。

另外,您也可以自行创建 Procfile 来指定应用启动命令,如:

copy



# icon/buttons/copy

  1. web: npm start

系统会优先使用 Procfile 中的启动命令。

注意:
请注意Profile的语法,冒号后在有一个空格。

六、特别说明

目前Nodejs项目仅支持使用node或者npm启动,如果需要编译成js,使用nginx的方式推荐使用Dockerfile

原文: https://www.rainbond.com/docs/stable/user-manual/app-creation/language-support/nodejs.html