我们正在使用Create-React-App开发一个ReactJS应用程序,该应用程序由我们的Node / Express服务器提供服务,该服务器也提供API。我们使用node / JS buildpack将整个服务器部署到Heroku,并尝试按照@mars {{3}的建议从节点npm run build
文件中获取postinstall
脚本中的CRA构建步骤package.json
}。
问题是Heroku部署失败并出现此错误。请注意,这个错误发生在我本地的某个时间,但是web_app中的npm install
正在解决问题,但在Heroku中运行时却没有。我有两个相关的问题:
npm install
。 答案 0 :(得分:16)
@johnnycon -
这正是问题所在,我在Mars github issue post收到https://github.com/mars/heroku-cra-node的回答:
@philjoseph,react-scripts(默认情况下)是CRA应用程序的devDependency,但Heroku Node buildpack的环境NODE_ENV = production,导致npm install跳过devDeps。
也要安装这些devDeps:
npm install --only = dev&& npm install&& npm run build
他还指出了这个出色的回购:{{3}}
我跟着它,它就像一个魅力:)
答案 1 :(得分:4)
由于您在开发和生产中都需要“react-scripts”,因此您可以简单地将“react-scripts”:“1.0.16”从“devDependencies”移动到“依赖项中“,所以heroku不会忽略它。
答案 2 :(得分:1)
在package.json中,react-scripts是声明为devDependency还是常规依赖?由于你是在Heroku上构建的,而heroku正在将env变量读作生产(我假设在这里),它不会安装react脚本。尝试将react-scripts作为常规依赖项移动,然后重试。
对于其他云提供商,我可能不会遵循这条路径,但对于Heroku来说,这是我发现阻力最小的路径。本文将详细介绍您的方案。 https://originmaster.com/running-create-react-app-and-express-crae-on-heroku-c39a39fe7851
答案 3 :(得分:0)
你能分享你的Package.json文件脚本的样子吗?我昨天实际上部署到了Heroku,它对我来说似乎工作得很好。
可能你的package.json中没有正确添加你的依赖项。
这就是我的脚本看起来的样子(如果你没有scss / less / sass忽略前两个脚本):
"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
。
答案 4 :(得分:0)
我正在尝试完全相同的事情,将一个create-react-app项目部署到heroku ,并获得react-scripts not found something...
。
Heroku将脚本读入package.json
,但无法执行。
解决此问题的关键是“创建/发布”“脚本”文件夹,默认情况下 create-react-app
不会创建它,只是保持简单。
通过运行eject
命令$npm run eject
,只要scripts
文件夹创建config
文件夹。
之后你可以再次执行heroku脚本,例如$ git push heroku master
希望它能在Heroku上部署所有内容。
有关create-react-app documentation
上的eject
脚本的详细信息
希望这会有所帮助,祝你好运。
答案 5 :(得分:0)
指定节点环境 告诉heroku我们要使用什么版本的heroku。默认情况下,heroku使用较旧的版本,这会使我们的应用程序崩溃。您有2个package.json文件,一个在客户端,另一个在快速服务器端。在快递服务器端,将此添加到package.json
"engines": {
"node": "12.9.1",
"npm": "6.10.2" },
指定启动脚本
Instruct heroku what command it should run to start up our server. Add this to the server side package.json
“开始”:“节点index.js”,
INSTALL HEROKU CLI
安装Heroku Cli
Sudo apt-get update
curl https://cli-assets.heroku.com/install-ubuntu.sh | sh or sudo snap install heroku
在macos中
brew install heroku cli
默认情况下,heroku使用基于git的部署过程或工作流程。
Git init
Git add .
Git commit -m “initial commit”
Heroku login
Heroku create nameOfTheApp
https://git.heroku.com/nameOfTheApp.git
此链接是我们的部署目标。这是一个git存储库,我们可以将本地服务器推送到它。
Git remote add heroku https://git.heroku.com/nameOfTheApp.git
Git push heroku master
答案 6 :(得分:0)
有一个非常简单的解决方案。在运行start
脚本之前,Heroku将运行build
脚本,如果它在您的package.json
中。
"scripts": {
"start": "node server.js",
"build": "cd client/ && yarn install && yarn build"
}