【问题标题】:How to get Mern Stack to work on Heroku如何让 Mern Stack 在 Heroku 上工作
【发布时间】:2016-08-05 07:45:09
【问题描述】:

我正在测试 Mern Stack(Mongo Express React/Redux 节点)并设置它进行开发,没有任何问题。现在我正在尝试部署到 Heroku。我像往常一样做了一个 git push heroku master,但是当我查看网站时,我看到了 Heroku 的应用程序错误。我通过 Heroku 添加了一个 MongoDB,并更改了我的 heroku 配置变量,因此它使用了该数据库(我认为我这样做是正确的)。所以我检查了日志:

npm ERR! file sh
npm ERR! code ELIFECYCLE
npm ERR! errno ENOENT
npm ERR! syscall spawn
npm ERR! mern-starter@1.0.0 start: `cross-env NODE_ENV=development nodemon index.js`
npm ERR! spawn ENOENT

往下走一点:

 > mern-starter@1.0.0 start /app
 > cross-env NODE_ENV=development nodemon index.js
   sh: 1: cross-env: not found

再往下:

npm ERR! Linux 3.13.0-79-generic
npm ERR! argv "/app/.heroku/node/bin/node" "/app/.heroku/node/bin/npm" "start"
npm ERR! node v5.10.0
npm ERR! npm  v3.8.3
npm ERR! file sh
npm ERR! code ELIFECYCLE
npm ERR! errno ENOENT
npm ERR! mern-starter@1.0.0 start: `cross-env NODE_ENV=development nodemon index.js`
npm ERR! syscall spawn
npm ERR! spawn ENOENT
npm ERR!
npm ERR! Failed at the mern-starter@1.0.0 start script 'cross-env NODE_ENV=development nodemon index.js'.

所以我对后端不太了解,但它似乎在 package.json 中运行开发脚本:

"scripts": {
    "test": "mocha shared/tests/*.spec.js --compilers js:babel-register",
    "test:server": "cross-env NODE_ENV=test PORT=8080 MONGO_URL=mongodb://localhost:27017/mern-test mocha --compilers js:babel-register --recursive server/tests/**/*.spec.js",
    "start": "cross-env NODE_ENV=development nodemon index.js",
    "start:prod": "cross-env NODE_ENV=production node index.js",
    "bs": "npm run clean && npm run build && npm run start:prod",
    "minify": "cleancss -o static/css/app.min.css static/css/app.css",
    "build": "cross-env NODE_ENV=production webpack --config webpack.config.prod.js && npm run minify",
    "clean": "rimraf static/dist",
    "slate": "rimraf node_modules && npm install",
    "lint": "eslint client server shared"
  }

那么我怎样才能让它工作呢?

编辑:

"devDependencies": {
    "babel-eslint": "^5.0.0-beta6",
    "babel-loader": "^6.2.1",
    "babel-plugin-react-transform": "^2.0.0",
    "babel-plugin-transform-react-constant-elements": "6.5.0",
    "babel-plugin-transform-react-inline-elements": "6.6.5",
    "babel-plugin-transform-react-remove-prop-types": "0.2.4",
    "babel-polyfill": "^6.3.14",
    "babel-preset-es2015": "^6.3.13",
    "babel-preset-react": "^6.3.13",
    "babel-preset-react-hmre": "^1.1.0",
    "babel-register": "^6.7.2",
    "chai": "^3.5.0",
    "clean-css": "^3.4.9",
    "cross-env": "^1.0.7",
    "css-loader": "^0.23.1",
    "css-modules-require-hook": "^2.1.0",
    "deep-freeze": "0.0.1",
    "eslint": "^1.10.3",
    "eslint-config-airbnb": "^4.0.0",
    "eslint-plugin-react": "^3.16.1",
    "expect": "^1.13.4",
    "expect-jsx": "^2.2.2",
    "extract-text-webpack-plugin": "^1.0.1",
    "mocha": "^2.4.5",
    "nodemon": "^1.9.1",
    "pre-commit": "^1.1.2",
    "react-addons-test-utils": "^0.14.7",
    "react-transform-hmr": "^1.0.1",
    "redux-devtools": "^3.1.1",
    "redux-devtools-dock-monitor": "^1.1.0",
    "redux-devtools-log-monitor": "^1.0.4",
    "rimraf": "^2.5.1",
    "style-loader": "^0.13.0",
    "supertest": "^1.1.0",
    "webpack": "^1.12.12",
    "webpack-dev-middleware": "^1.5.1",
    "webpack-hot-middleware": "^2.6.4"
  },

【问题讨论】:

  • 你能发布你的 package.json 依赖吗?包括cross-env 吗?或者您能否确认您在执行命令之前运行了npm install
  • 已编辑以显示开发依赖项。交叉环境就在那里。应该是依赖吗?
  • 你在npm run <whatever your script command is>之前运行npm install
  • 好吧,我运行了 npm install,但没有运行 npm run <...>。我刚刚尝试了 npm run start:prod,但我在 heroku 上看不到它。这将如何运作?我以为 heroku 只是获取代码并从他们的服务器上运行它。
  • 我的理解是您需要通过heroku 命令或通过 git (devcenter.heroku.com/articles/…) 推送到 heroku。我在您的脚本中没有看到这些命令,看起来您正在使用 server.js 启动本地服务器,但不知道该文件的作用...

标签: heroku reactjs production react-redux mern


【解决方案1】:

我在这里写过:https://hashnode.com/post/deploying-mern-to-heroku-success-cio7sc1py013nis531rg3lfmz

原因是因为 herokou 不知道你的 devDependencies 树,只有你的常规 dependencies 被推送。

快速解决方法是将您的所有devDependencies 复制到您的dependencies

您还必须从 .gitignore 文件中删除以下内容:

public/* static/dist static/css/app.min.css

我在文章中概述了其他几个步骤,但这些是没有一些额外配置就无法工作的主要原因。

【讨论】:

  • 我按照您的教程进行操作,但我的应用程序没有启动。当我从 heroku cli 服务器运行命令“heroku run node server.js”时,在端口 8080 启动,但无法访问它。说应用程序错误。我添加了一个 mLab 链接作为数据库路径(不是测功机;因为它要求我输入信用卡)。你能帮我弄清楚这个吗?
  • 使用 heroku logs --tail 检查日志,这应该可以对导致崩溃的错误有所了解
猜你喜欢
  • 1970-01-01
  • 2021-12-25
  • 2021-03-30
  • 2013-09-15
  • 2019-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-07
相关资源
最近更新 更多