混合反应与快递?

我有一个基于React的应用程序,运行一个基于NodeJS的服务器,并希望允许它下载一个非静态文件,而不使用xhr。

我正在考虑使用Express,但我不知道如何使它与React在同一个容器中共存? 任何人都可以build议我怎么去这个? 我仍然在学习webpack和React,而且我很难find这样的例子吗?

React服务器通过webpack启动:

node ./node_modules/webpack-dev-server/bin/webpack-dev-server.js --host 0.0.0.0 --port 8081 --hot --inline 

使用webpack-dev-server.js,看起来如下所示:

 module.exports = { entry: [ './src/index.js' ], output: { path: __dirname, publicPath: '/', filename: 'bundle.js' }, module: { loaders: [{ exclude: /node_modules/, loader: 'babel', query: { presets: ['react', 'es2015', 'stage-1'] } }] }, resolve: { extensions: ['', '.js', '.jsx'] }, devServer: { historyApiFallback: true, contentBase: './' } }; 

'./src/index.js'是Reacttypes代码。

免责声明:我从来没有广泛使用过webpack-dev-server (至less不是直接),但我可以想到两种解决scheme。

一个是使用webpack-dev-serverconfiguration中的设置。 如此处所述 :

 setup: function(app) { // Here you can access the Express app object and add your own custom middleware to it. // For example, to define custom handlers for some paths: // app.get('/some/path', function(req, res) { // res.json({ custom: 'response' }); // }); } 

或者,我自己使用的方法是使用webpack-dev-middleware ,它是Express的中间件。 所以基本上,你创build了自己的Express服务器,它具有与webpack-dev-server相同的function。

以下是我的一个项目摘录(其中app是Express应用程序实例):

 // Webpack (only when not running in `production` mode): if (process.env.NODE_ENV !== 'production') { debug('setting up webpack middleware'); const webpackDevMiddleware = require('webpack-dev-middleware'); const webpackHotMiddleware = require('webpack-hot-middleware'); const webpackConfig = require('./webpack.dev'); const compiler = require('webpack')(webpackConfig); app.use(webpackDevMiddleware(compiler, { noInfo : true, publicPath : webpackConfig.output.publicPath })); app.use(webpackHotMiddleware(compiler)); } 

除了@ robertklep的回答,基于一些进一步的研究,您可以“编译”您的React项目,然后只使用那些没有nodejs的资源。

使用node&webpack来“编译”你的项目:

 node node_modules/.bin/webpack 

这将创build一个包含已编译项目的bundle.js文件。 其他文件,如图像,外部Javascript和样式表将需要复制,例如(假设有一个dist文件夹):

 cp bundle.js dist/ cp index.html dist/ cp -rf img css frameworks dist/ 

那么dist文件夹中的所有东西都可以通过传统的Web服务器(如Nginx或Apache)和NodeJS来提供。