2017-01-30 368 views
0

我们正在使用Create-React-App开发ReactJS应用程序,该应用程序由我们也提供API的Node/Express服务器提供。我们使用node/JS buildpack将整个服务器部署到Heroku,并试图从节点package.jsonpostinstall脚本中获取CRA构建步骤npm run build,如@mars in this issue所示。通过`react-scripts:not found`创建React-App部署失败。

问题在于Heroku部署失败并出现此错误。请注意,这个错误在我的本地发生,但之后web_app中的npm install正在解决此问题,但在Heroku中运行时不会。我有两个相关的问题:

  1. 如何部署到Heroku一个Node/Express应用程序,同时提供API和Create-React-App应用程序?我可以提交我的构建目录,但这真的不是正确的方法。
  2. 为什么react-scripts正在消失,我必须运行多次npm install
+0

您是否添加了'postinstall'脚本?你可以发布你的'package.json'文件吗?你在命令行中运行了'npm install -g webpack'吗? – Daniel

+0

你创建了你的节点'server.js'吗? – Daniel

回答

1

react-scripts是否声明为package.json中的devDependency或常规依赖项?由于您在Heroku上构建,而且heroku正在读取env变量(我在此假设),因此它不会安装react-scripts。尝试将react-scripts作为常规依赖项再次尝试。

与其他云提供商一样,我可能不会遵循这条路,但对于Heroku,这是我找到的阻力最小的路径。本文将详细介绍您的场景。 https://originmaster.com/running-create-react-app-and-express-crae-on-heroku-c39a39fe7851

+0

这正是问题所在,我从[Mars](https://github.com/mars)在[github发布帖子]中收到了答案(https://github.com/mars/create-react-解决方案基本上是在这一行: ''postinstall“:”knex migrate:latest && if [\“$ NODE_ENV \”= production];然后cd web_app/&& app-buildpack/issues/32#issuecomment-276081892) –

0

你可以分享你的Package.json文件脚本的外观吗?我昨天实际部署到Heroku,对我来说它似乎工作得很好。

也许你的依赖没有被正确地添加到你的package.json中。

这就是我的脚本的外观。 (如果你没有任何SCSS /更少/青菜忽略前2个脚本)

"scripts": { 
"build-css": "node-sass src/ -o src/", 
"watch-css": "npm run build-css && node-sass src/ -o src/ --watch --recursive", 
"start": "npm run start:server", 
"watch": "npm-run-all --parallel watch-css start:*", 
"start:server": "node server/server.js", 
"start:client": "react-scripts start", 
"build": "npm run build-css && react-scripts build", 
"test": "react-scripts test --env=jsdom", 
"eject": "react-scripts eject", 
"postinstall": "npm run build"} 

当发展运行采取Hotrealoding的优势,我运行

npm run watch 

而对PROD我跑

npm run build 

然后我部署到Heroku。尝试在单独的终端窗口中检查Heroku中的日志,以便检查部署的错误。您可以使用heroku logs来显示日志的最后100行。

或者尾日志实时:heroku logs -t

希望这有助于你。 干杯

+0

npm install --only = dev && npm install && npm run build; fi“' –

9

@johnnycon -

这正是这个问题,我已经在这个github issue post得到的回答从Mars

@philjoseph,反应的脚本是(默认)一个devDependency对于CRA应用程序,但Heroku Node buildpack具有环境NODE_ENV =生产,这会导致npm install跳过devDeps。

安装这些devDeps太:

NPM安装--only =开发& & NPM安装& & NPM运行建立

他还指出,这个优秀的回购:https://github.com/mars/heroku-cra-node

我跟着这个,它就像一个魅力:)

+0

将很好的标记为答案,所以它出现在顶部。 –

+0

此答案应标记为最佳答案 –

+0

如果我们使用纱线,该怎么办? 我试过了: yarn install --only = dev && yarn install && npm run build 但是这似乎没有改变软件包锁定文件 – PhoenixB

2

因为你nee d“react-scripts”在开发和生产中,你可以简单地将“react-scripts”从“devDependencies”转换为“依赖关系”,所以heroku不会忽略它。