当前位置: 首页 > 知识库问答 >
问题:

无法使用react-router v4获得“/about”(生产帮助)

秦楚
2023-03-14

我已经阅读了所有关于react-router-dom(v4)的文档,以及大量带有相同错误的堆栈溢出问题,但A)它们留下了许多未回答的漏洞,B)它们似乎都建议了一个只用于开发的修复方案,所以我希望看看人们在这个简单的场景中实际在生产中做了什么,C)我可能在做一些愚蠢的事情,答案对我不起作用,控制台中没有错误地呈现“不能得到/关于”的错误。

我使用Express、React、Node和Webpack进行编译。我可以成功地到达我的主页,单击任何链接都会将我带到适当的组件,但手动键入URL会打破这一点,正如这里讨论的和这里讨论的错误的原因。

大多数回答建议在webpack.config.js文件中添加devserver.historyapifallback=trueoutput.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')
);

共有1个答案

艾心远
2023-03-14

您必须设置web服务器(使用react应用程序为index.html提供服务的服务器),以便将所有请求重定向到index.html的url,以便react-router能够完成其工作。这就是建议对webpack.config.js的更改对webpack-dev-server的作用

webpack.config.js中,需要启用html插件,以便webpack知道index.html在哪里:

plugins: [
    new webpack.DefinePlugin({
        'process.env': {
            //you don't get to see this
        }
    }),
    new HtmlWebpackPlugin({
        template: 'public/index.html' //or wherever your index.html is
    })
],
 类似资料:
  • 主要内容:1. 访问帮助手册,2. 有关特定主题的帮助,3. 在手册中搜索帮助短语,4. 访问在线帮助Vim是功能丰富的编辑器,因此记住它的所有功能是有一定的困难的。 但是也不需要担心,因为总是可以寻求帮助。而这个帮助是由Vim本身提供的。 在本章中,将讨论以下主题内容 - 访问帮助手册 有关特定主题的帮助 在手册中搜索帮助短语 访问在线帮助 1. 访问帮助手册 Vim编辑器本身附带了帮助手册,它非常全面。 要访问帮助可执行以下命令 - 如下图所示: 2. 有关特定主题的帮助 帮助手册将显示有关

  • 你可以从以下渠道获得关于pact的帮助: Google用户群组: https://groups.google.com/forum/ Gitter: 加入 https://gitter.im/realestate-com-au/pact 和 https://gitter.im/DiUS/pact-jvm 的交流

  • 我们非常有兴趣在Envoy周围建立一个社区。如果您有兴趣使用它,需要帮助或想贡献,请联系我们。 请参阅联系信息 报告安全漏洞 请参阅安全联系信息

  • 问题内容: 我运行以下命令: 我得到了一个可以自己使用的文件。工作正常,但是NODE_ENV已设置为开发状态,我得到了一个关于下载React DevTools的console.log。 如何将其设置为生产?我四处浏览,没有找到对我有用的东西。我尝试了envify,但是没有运气(我对JS版本非常陌生)。 我尝试将–NODE_ENV生产放在上面的行中,但是我对于浏览器和Babelify还是很陌生,所以

  • iam无法在运行应用程序时检索到swagger ui,http://localhost:8080/Swagger-ui.html,有人能说出原因吗?

  • 问题内容: 请帮助我得到一个where 本身就是一个泛型类型。如我现在所见,Spring RestTemplate现在不支持此功能。我正在使用Spring MVC版本3.1.2 这是我要使用的代码:代码: 我收到此错误: 这是明显的错误,但是今天如何解决呢? 比我想得到我的通用响应类型: 现在,我使用此解决方案,并且不使用: 问题答案: 通过引入修复了该问题,你可以显式继承该参数化类型,以便在运行