在使用Travis CI运行后,如何将Node Express和React应用程序部署到Heroku?

时间:2018-04-15 15:29:32

标签: node.js express heroku deployment travis-ci

安装后:

  • 在localhost:5000上运行的Node Express服务器。
  • 直接在服务器文件夹中使用create-react-app创建的客户端文件夹。
  • CI与Travis CI的整合

我希望在传递时将我的应用部署到heroku。因此,我创建了以下.travis.yml

language: node_js
before_install: 
  - npm install && node index.js &
before_script: cd ./client && npm install
node_js:
  - "stable"
cache:
  directories:
  - node_modules
script:
  - npm run test
  - npm run lint
  - npm run build
notifications:
    slack: clicker-web:myslack
deploy:
  provider: heroku
  api_key: "mykey"
  app: test999111test
  on: heroku-deployment-testing

所以我把它部署到了heroku而没有使用travis失败。 但是在heroku应用程序本身我只是得到错误(在控制台中):

npm ERR! code ELIFECYCLE
2018-04-15T15:15:31.033343+00:00 app[web.1]: npm ERR! errno 1
2018-04-15T15:15:31.034412+00:00 app[web.1]: npm ERR! Clicker@0.1.0 start: `node scripts/start.js`
2018-04-15T15:15:31.034622+00:00 app[web.1]: npm ERR! Exit status 1
2018-04-15T15:15:31.034841+00:00 app[web.1]: npm ERR! 
2018-04-15T15:15:31.035019+00:00 app[web.1]: npm ERR! Failed at the Clicker@0.1.0 start script.

所以我很确定我的设置有问题。

这是我在服务器(root)目录中设置的package.json(只是您需要的一段代码):

"engines": {
    "node": "8.1.1",
    "npm": "5.0.3"
  },
  "scripts": {
    "client": "npm start --prefix client",
    "buildclient": "npm build --prefix client",
    "server": "nodemon index.js",
    "dev":
      "concurrently --kill-others-on-fail \"npm run server\" \"npm run client\"",
    "build": "concurrently \"npm run server\" \"npm run client\"",
    "test": "npm run server",
    "start": "node index.js",
    "heroku-postbuild":
      "npm run install --prefix client && npm run build --prefix client"

我在我的应用程序中使用代理进行开发工作正常。但是在heroku上我不需要它。我在index.js(在服务器根目录中)创建了这些行:

const path = require("path");
app.get("*", (req, res) => {
  res.sendFile(path.resolve(__dirname, "client", "build", "index.html"));
});

但是我总是从Heroku那里得到同样的错误。我做错了什么以及如何使用服务器+客户端将项目部署到Travis的heroku并进行最佳实践?

这是项目,您可以在其中查看文件结构。我现在在heroku-deployment-testing分店。

Github Repo

此处还有herokuapp除了错误之外没有显示任何内容:

Heroku App

最后但并非最不重要的是travis日志(它正在部署的最后一部分):

enter image description here

1 个答案:

答案 0 :(得分:1)

尝试使用此配置

language: node_js
node_js:
- '8'
cache:
  directories:
  - node_modules
  - client/node_modules
install:
- npm install
- npm run build
script:
- nohup npm run start &
- sleep 3
- npm run test
- npm run lint
deploy:
  provider: heroku
  api_key:
    secure: API_KEY
  app: YOUR_APP_NAME

我相信您不需要before_installbefore_script部分。

此外,您还不需要运行npm run build脚本,因为您正在使用" heroku_postbuild" package.json中的脚本。