我需要一些關於如何在瀏覽器歷史記錄和Webpack中使用React-router的幫助。一切正常,直到我需要使用嵌套路由的時候,那就是當我在我的bundle.js上獲得404s。不能在React-Router和Webpack中使用嵌套路由
沒有歷史記錄(帶#中的網址)一切正常,但我寧願去沒有他們。我儘可能使用代理服務器(代碼如下),它確實解決了問題,但也意味着我似乎無法使用我需要的所有其他Webpack內容(如postcss等)。至少我不知道如何。
所以我真的很想使用Webpack來處理我的postcss,React-router和乾淨的url以及嵌套路由。看起來不是太有前途的那麼遠,
這是我的WebPack配置文件(ES6語法):
import path from 'path';
import HtmlwebpackPlugin from 'html-webpack-plugin';
import merge from 'webpack-merge';
import ExtractTextPlugin from 'extract-text-webpack-plugin';
import postcssImport from 'postcss-import';
import nested from 'postcss-nested';
import mqpacker from 'css-mqpacker';
import cssnext from 'postcss-cssnext';
const TARGET = process.env.npm_lifecycle_event;
const ROOT_PATH = path.resolve(__dirname);
const APP_PATH = path.resolve(ROOT_PATH, 'app');
const BUILD_PATH = path.resolve(ROOT_PATH, 'public');
const common = {
entry: [
APP_PATH + '/App.js',
],
output: {
path: BUILD_PATH,
filename: 'bundle.js',
},
module: {
loaders: [
{
test: /\.jsx?$/,
exclude: /(node_modules|bower_components)/,
loader: 'babel',
},
{
test: /\.css$/,
/* loader: 'style-loader!css-loader!postcss-loader',*/
loader: ExtractTextPlugin.extract('style-loader', 'css-loader?sourceMap!postcss-loader'),
},
],
},
postcss: function(webpack) {
return [
postcssImport({
addDependencyTo: webpack,
}),
nested,
mqpacker,
cssnext(),
];
},
};
if (TARGET === 'dev' || !TARGET) {
module.exports = merge(common, {
devtool: 'inline-source-map',
devServer: {
historyApiFallback: true,
hot: true,
inline: true,
progress: true,
},
plugins: [
new ExtractTextPlugin('app.css'),
new HtmlwebpackPlugin({
title: 'Hohohohoho',
template: BUILD_PATH + '/index.html',
inject: 'body',
}),
],
});
}
...這工作正常,但沒有使用嵌套路線的能力。這裏是再次東西,我試着用節點,得到它的工作,但後來卻沒用postcss用的WebPack:
require('babel/register')({});
var server = require('pushstate-server');
server.start({
port: process.env.PORT || 8090,
directory: './public'
});
var WebpackDevServer = require("webpack-dev-server");
var webpack = require("webpack");
var compiler = webpack(process.argv[2] == 'hot' ? require('./webpack.config.hot.js') : require('./webpack.config.babel.js'));
var devServer = new WebpackDevServer(compiler, {
stats: {colors: true},
contentBase: 'http://localhost:8090/',
publicPath: 'http://localhost:8080/js/',
hot: process.argv[2] == 'hot'
});
devServer.listen(8080, "localhost", function() {})
有人告訴我使用historyApiFallback但似乎並沒有在改變任何東西,但它的存在儘管如此,在webpack選項。
謝謝,但這正是我無法工作的那一點。就像我寫的,沒有歷史,一切都很好,但是我需要在我的網址中添加那些醜陋的#。有了歷史記錄,當我擁有嵌套路線時,事情就會失敗,example.com/blaah運行得很好,但example.com/blaah/bleeh無法運行... – QlliOlli
向我顯示您的路線,我將能夠提供幫助。在此期間,您可以看看我的[遊樂場示例](https://github.com/knowbody/react-router-playground)。你可以看到webpack設置並玩耍。 – knowbody
這與https://github.com/rackt/react-router/issues/2303有關嗎?如果是這樣,我也無法弄清楚如何使用歷史記錄和呈現非根組件。文檔中提到我需要設置服務器(https://github.com/rackt/react-router/blob/v1.0.0-rc3/docs/guides/basics/Histories.md#configuring-your-server),但他們不會告訴我該怎麼做。他們提到快遞,但不幸的是我對快遞一無所知。現在我決定從中刪除history = {createHistory()},因爲我無法弄清楚如何使用它。 –
Nso