[英]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.