【发布时间】:2017-05-24 02:27:48
【问题描述】:
我一直在使用来自 react-router 的 hashHistory 构建一个反应单页应用程序,并且一切正常,直到我决定删除 URL 中的尾随代码,如下所示:#/?_k=ncbx6v。
我遇到的推荐解决方案是转换到 browserHistory,但我注意到所有示例和解决方案都需要使用 webpack-dev-server 并将 history-api-fallback 设置为 true。我尝试了这种方法并且它有效(通过localhost),但是曾经有效的独立 bundle.js 文件 + index.html 不再有效。
当我运行 webpack 并打开 html 文件时,我在控制台中收到此错误:
Warning: [react-router] Location "/Users/mike/project/index.html" did not match any routes
我不熟悉问题背后的机制,但我很好奇是否有我不熟悉的解决方案。
这是我的 webpack 文件:
const {resolve} = require('path')
module.exports = () => {
return {
context: resolve('src'),
entry: './app',
output: {
path: resolve('public'),
filename: 'bundle.js',
publicPath: '/public/'
},
resolve: {
extensions: ['.js', '.jsx', '.json']
},
stats: {
colors: true,
reasons: true,
chunks: false
},
module: {
rules: [
{enforce: 'pre', test: /\.jsx?$/, loader: 'eslint-loader', exclude: [/node_modules/]},
{test: /\.jsx?$/,loader: 'babel-loader', include: /src/, exclude: /node_modules/
},
{test: /\.json$/, loader: 'json-loader'},
{test: /(\.css)$/, loaders: ['style-loader', 'css-loader']},
{test: /\.eot(\?v=\d+\.\d+\.\d+)?$/, loader: "file-loader"},
{test: /\.(woff|woff2)$/, loader: "url-loader?prefix=font/&limit=5000"},
{test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/, loader: "url-loader?limit=10000&mimetype=application/octet-stream"},
{test: /\.svg(\?v=\d+\.\d+\.\d+)?$/, loader: "url-loader?limit=10000&mimetype=image/svg+xml"}
]
}
}
}
这是我的 app.js:
'use strict'
import React from 'react'
import ReactDOM from 'react-dom'
import Layout from './components/common/Layout'
import { Router, Route, IndexRoute, browserHistory } from 'react-router'
import configureStore from './store/configureStore'
import { Provider } from 'react-redux'
const store = configureStore()
class App extends React.Component {
render () {
return (
<Provider store={store}>
<Router history={browserHistory}>
<Route path='/' component={Layout}></Route>
</Router>
</Provider>
)
}
}
ReactDOM.render(<App />, document.getElementById('app'))
【问题讨论】:
标签: reactjs webpack react-router webpack-dev-server