簡體   English   中英

在本地和真正的NodeJS服務器(IBM Bluemix)上運行React服務器端渲染有什么區別

[英]What is the difference to run React server-side rendering locally and on real NodeJS server (IBM Bluemix)

我使用研討會git作為我的微小更改的基礎,使用服務器端渲染創建了一個簡單的react應用。 因此,當我在本地運行NODE_ENV=server node server.js它工作正常。 但是我嘗試在Bluemix Nodejs服務器的試用版上部署此應用程序的嘗試失敗了。 這是一條日志: 在此處輸入圖片說明 這是我的server.js代碼:

require('babel-register')

const express = require('express')
const React = require('react')
const ReactDOMServer = require('react-dom/server')
const ReactRouter = require('react-router')
const StaticRouter = ReactRouter.StaticRouter
const _ = require('lodash')
const fs = require('fs')
const PORT = 5050
const baseTemplate = fs.readFileSync('./index.html')
const template = _.template(baseTemplate)
const App = require('./js/App').default

const server = express()

server.use('/_public', express.static('./_public'))

server.use((req, res) => {
  const context = {}
  const body = ReactDOMServer.renderToString(
    React.createElement(StaticRouter, {location: req.url,
      context: context},
    React.createElement(App))
  )

  res.write(template({body: body}))
  res.end()
})

console.log('listening on port', PORT)
server.listen(PORT)

PS很明顯,它不了解js / App.js中的ES6語法,但是在我的本地服務器上它可以工作。 默認情況下, NODE_ENV=production但是根據Bluemix 文檔,我在.profile.d目錄下的node_env.sh代碼中創建了一個文件:

export NODE_ENV=server;

但是我不確定該文件是否更改了node_env。

我希望比我有更多知識的人可以提供更好的解決方案,但這是我為使您的應用正常工作所做的。 可能有一個更好的答案。

假設您不想在生產模式下運行...

1)server.js:偵聽PORT env var中設置的端口。
server.listen(process.env.PORT || PORT)

2)package.json:在scripts添加start命令

"start": "babel-node server.js --presets es2015,stage-2"

3)獲取babel-cli

npm install --save-dev babel-cli

npm install --save-dev babel-preset-es2015 babel-preset-stage-2

4)創建manifest.yml來設置CF屬性

 applications:
 - name: rvennam-node-react
   memory: 1G
   disk_quota: 2G
   env:
     NPM_CONFIG_PRODUCTION: false
     NODE_ENV: dev

5)從package.json中的devDependencies中刪除eslint依賴(存在不匹配)

同樣,這是假設您要在開發模式下在Bluemix上運行。 如果您想在Bluemix上進行生產,我想您想使用webpack在本地構建,然后推送並提供dist目錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM