2017-01-30 369 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不會忽略它。