【发布时间】:2018-02-15 16:37:57
【问题描述】:
我一直在阅读 react-router-dom (v4) 的所有文档,以及大量出现相同错误的 Stack Overflow 问题,但是 A) 他们留下了很多未解决的漏洞 B) 他们似乎都建议仅进行开发修复,因此我希望看到人们在 PRODUCTION 中针对这个简单场景实际做了什么,并且 C)我可能在做一些愚蠢的事情,答案对我不起作用,出现错误“不能GET /about" 渲染在控制台中没有错误。
我正在使用 Express、React、Node 并使用 Webpack 进行编译。我可以成功访问我的主页,单击任何链接会将我带到相应的组件,但手动输入 URL 会破坏这一点,正如 here 所讨论的那样,并且此错误的原因已被讨论 here。
大多数答案建议在 webpack.config.js 文件中添加 devServer.historyApiFallback = true 和 output.publicPath = '/',这意味着我还需要运行 npm install --save-dev webpack-dev-server 并按照文档中的建议使用 node_modules/.bin/webpack-dev-server 运行它。做这一切,什么都没有发生。事实上,现在更糟了,因为我也无法访问我的“/”路径。
所以在将我当前的配置放在这里之前,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')
);
【问题讨论】:
标签: reactjs react-router react-router-v4