我一直在閱讀所有有關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頁面明確指出它僅用於開發,那麼人們爲生產做什麼? –