我一直在阅读所有有关react-router-dom(v4)的文档,以及Stack Overflow问题与我相同的错误,但A )他们留下了很多没有答案的漏洞和B)他们似乎都只是建议一个开发只修复,所以我希望看到人们实际上在为这个简单的场景进行的制作和C)我可能做一些愚蠢的事情并且答案不适合我,在控制台中出现错误“Can not GET/about”呈现没有错误。无法通过react-router v4获取“/ About”(生产帮助)
我正在使用Express,React,Node和使用Webpack进行编译。我可以成功地访问我的主页,然后点击任何链接将我带到相应的组件,但手动输入URL会破坏此操作,如here所述,并且讨论此错误的原因here。
大多数答案建议在webpack.config.js文件,这意味着我还需要运行npm install --save-dev webpack-dev-server
和使用node_modules/.bin/webpack-dev-server
作为文档建议运行它添加devServer.historyApiFallback = true
和output.publicPath = '/'
。做这一切,没有任何反应。事实上,现在情况更糟,因为我也无法访问我的“/”主路线。
因此,在放弃我目前的配置之前,1)我能做些什么来解决这个问题? 2)它甚至重要吗? webpack-dev-server显然仅用于开发,那么生产呢?
我webpack.config.js文件:
var webpack = require('webpack');
var path = require('path');
var envFile = require('node-env-file');
process.env.NODE_ENV = process.env.NODE_ENV || 'development';
try {
envFile(path.join(__dirname, 'config/' + process.env.NODE_ENV + '.env'))
} catch (e) {
}
module.exports = {
devServer: {
historyApiFallback: true,
},
entry: [
'script-loader!foundation-sites/dist/js/foundation.min.js',
'./app/app.jsx'
],
plugins: [
new webpack.DefinePlugin({
'process.env': {
//you don't get to see this
}
})
],
output: {
path: __dirname,
filename: './public/bundle.js',
publicPath: '/'
},
resolve: {
modules: [
__dirname,
'node_modules',
'./app/components',
'./app/api'
],
alias: {
app: 'app',
applicationStyles: 'app/styles/app.scss',
actions: 'app/actions/actions.jsx',
configureStore: 'app/store/configureStore.jsx',
reducers: 'app/reducers/reducers.jsx'
),
},
extensions: ['.js', '.jsx']
},
module: {
rules: [
{
loader: 'babel-loader',
query: {
presets: ['react', 'es2015', 'stage-0']
},
test: /\.jsx?$/,
exclude: /(node_modules|bower_components)/
},
{
loader: 'url-loader?limit=100000',
test: /\.(jpg|png|woff|woff2|eot|ttf|svg)$/
},
{
loader: 'sass-loader',
test: /\.scss$/,
options: {
includePaths: [
path.resolve(__dirname, './node_modules/foundation-sites/scss')
]
}
}
]
},
devtool: process.env.NODE_ENV === 'production' ? false : 'source-map'
};
我app.jsx:
var React = require('react');
var ReactDOM = require('react-dom');
import {Provider} from 'react-redux';
import {BrowserRouter as Router, Route, Switch, Link, HashRouter} from 'react-router-dom';
import Home from 'Home';
import Watch from 'Watch';
import About from 'About';
import AddShow from 'AddShow';
var store = require('configureStore').configure();
import firebase from 'app/firebase/';
// Load Foundation
$(document).foundation();
// App css
require('style-loader!css-loader!sass-loader!applicationStyles');
ReactDOM.render(
<Provider store={store}>
<Router>
<div>
<Route exact path="/" component={Home}/>
<Route path="/watch" component={Watch}/>
<Route path="/about" component={About}/>
<Route path="/addshow" component={AddShow}/>
</div>
</Router>
</Provider>,
document.getElementById('app')
);
是的,我明白这个概念,但为什么它不工作。开发服务器在启动时声明: '项目运行在http:// localhost:8081/ webpack输出来自/ 404s将回退到/ index.html'但是,当我去'localhost:8081/'我得到'不能GET /' –
对于这个错误,您需要将HtmlWebpackPlugin添加到您的'webpack.config.js'中,我将其添加到答案 – SrThompson
谢谢加法确实帮助我通过它来工作webpack-dev-server,但是如果我只是启动我的express服务器,它不起作用,并且最终会出现同样的问题。 “webpack-dev-server”github页面明确指出它仅用于开发,那么人们为生产做什么? –