我正在研究一个非常简单的react应用程序(我的第一个),但我无法弄清楚如何让API和反应服务器启动……
我正在使用react-router用于客户端路由,并且我在另一个项目上使用了express,所以我用它来启动我的React项目来设置API.
但我想知道是否有办法使用react-router处理API路由并返回一些数据……
我用Google搜索并环顾四周,但我似乎可以找到任何相关信息(也不确认或反驳).
有没有人对此有任何意见?
(我知道这不是一个正确的问题,但我似乎无法找到任何信息来关闭唠叨的奇迹)
解决方法:
有一种方法可以启动API服务器并做出反应.在我的案例server.js中的快速主文件中.您需要安装webpack-dev-middleware和webpack-hot-middleware.
// server.js
import path from 'path';
import express from 'express';
import webpack from 'webpack';
import webpackDevMiddleware from 'webpack-dev-middleware';
import webpackHotMiddleware from 'webpack-hot-middleware';
import config from './webpack.config';
const app = express(),
DIST_DIR = path.join(__dirname, 'client'),
HTML_FILE = path.join(DIST_DIR, 'index.html'),
compiler = webpack(config),
isDevelopment = process.env.NODE_ENV === 'development';
if (isDevelopment) {
app.use(webpackDevMiddleware(compiler, {
publicPath: config.output.publicPath,
}));
app.use(webpackHotMiddleware(compiler));
} else {
app.use(express.static(DIST_DIR));
}
app.get('/', (req, res) => res.sendFile(HTML_FILE));
app.get('*', (req, res) => res.redirect(301, '/'));
app.listen(process.env.PORT || 4200);
然后在您的webpack.config.js中,您可以按照以下设置进行操作:
const path = require('path');
const webpack = require('webpack');
process.env.NODE_ENV = process.env.NODE_ENV || 'development';
module.exports = {
entry: [
'webpack-hot-middleware/client',
'./app/app.jsx',
],
externals: {
jquery: 'jQuery',
'react/addons': 'react',
'react/lib/ExecutionEnvironment': 'react',
'react/lib/ReactContext': 'react',
},
output: {
path: path.resolve(__dirname, 'client'),
filename: 'bundle.js',
publicPath: '/',
sourceMapFilename: 'bundle.map',
},
devtool: process.env.NODE_ENV === 'production'
? undefined : 'cheap-module-eval-source-map',
resolve: {
modules: ['node_modules', './app/components'],
extensions: ['.js', '.jsx'],
},
module: {
rules: [
{
test: /(\.js$|\.jsx$)/,
exclude: /(node_modules|bower_components)/,
use: [
{
loader: 'babel-loader',
options: {
presets: ['react', 'es2015', 'stage-0', 'airbnb'],
},
},
],
},
{
test: /\.scss$/,
use: ['style-loader', 'css-loader', 'sass-loader'],
},
{
test: /\.(eot|svg|ttf|woff|woff2)(\?v=\d+\.\d+\.\d+)?$/,
use: {
loader: 'file-loader',
options: {
name: '[name].[ext]'
}
}
}
],
},
plugins: [
new webpack.optimize.OccurrenceOrderPlugin(),
new webpack.HotModuleReplacementPlugin(),
new webpack.NoEmitOnErrorsPlugin(),
new webpack.ProvidePlugin({
$: 'jquery',
jQuery: 'jquery',
}),
new webpack.optimize.UglifyJsPlugin({
sourceMap: true,
minimize: true,
compressor: {
warnings: false,
},
}),
new webpack.DefinePlugin({
'process.env': {
NODE_ENV: JSON.stringify(process.env.NODE_ENV)
},
}),
],
};
然后在你的package.json脚本中:
// package.json
"scripts": {
"build": "webpack",
"postinstall": "npm run build",
"start": "babel-node server.js",
"start:dev": "nodemon -e js --exec babel-node -- ./server.js",
"test": "karma start"
}
现在,当您启动Express服务器时,您的API和react将一起运行.
原文地址:https://codeday.me/bug/20190701/1348393.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。