【发布时间】:2019-08-10 07:07:29
【问题描述】:
最近我遇到了与post "historyApiFallback doesn't work in Webpack dev server" 相同的问题。
我将首先在该帖子中引用接受的答案。
答案:
我今天遇到了同样的问题。让 webpack.config.js 中的配置: output.publicPath 等于 devServer.historyApiFallback.index 和 指出 html 文件 route.my webpack-dev-server 版本是 1.10.1 并且运行良好。 http://webpack.github.io/docs/webpack-dev-server.html#the-historyapifallback-option不行,必须指出html文件路径。
module.exports = {
entry: "./src/app/index.js",
output: {
path: path.resolve(__dirname, 'build'),
publicPath: 'build',
filename: 'bundle-main.js'
},
devServer: {
historyApiFallback:{
index:'build/index.html'
},
},
};
我尝试使用这个答案来解决问题(设置
output.publicPath: 'dist' 和devServer.historyApiFallback:{index:'dist/index.html'})
但不知何故它不起作用。
经过一番搜索,我找到了这个page。根据页面描述:
本部分适用于在开发中遇到此问题的每个人 使用 webpack-dev-server.. 就像上面一样,我们需要做什么告诉 Webpack Dev Sever 将所有服务器请求重定向到 /index.html。 您需要设置 webpack 配置中的两个属性 为此,请使用 publicPath 和 historyApiFallback。
module.exports = {
entry: './app/index.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'index_bundle.js',
publicPath: '/'
},
module: {
rules: [
{ test: /\.(js)$/, use: 'babel-loader' },
{ test: /\.css$/, use: [ 'style-loader', 'css-loader' ]}
]
},
devServer: {
historyApiFallback: true,
},
plugins: [
new HtmlWebpackPlugin({
template: 'app/index.html'
})
]
};
根据配置,我将devServer.historyApiFallback 修改为true,将output.publicPath 修改为/。
我的 webpack 配置:
const webpack = require("webpack")
const path = require("path")
const CleanWebpackPlugin = require('clean-webpack-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
mode: "development",
entry: {
app: "./src/base/index.js"
},
output: {
filename: "[name].bundle.js",
publicPath: '/',
path: path.resolve(__dirname, "dist")
},
devtool: 'inline-source-map',
devServer: {
hot: true,
port: 3000,
historyApiFallback: true
},
module: {
rules: [
{
test: /\.(js|jsx)$/,
exclude: /node_modules/,
use: {
loader: "babel-loader"
}
},
{
test: /\.(scss|css)$/,
use: [
"style-loader",
"css-loader",
"sass-loader"
]
},
{
test: /\.(pdf|jpg|png|gif|svg|ico)$/,
use: [
{
loader: 'url-loader'
},
]
},
]
},
plugins: [
new CleanWebpackPlugin(),
new HtmlWebpackPlugin({
template: './src/base/index.html'
}),
new webpack.HotModuleReplacementPlugin()
],
}
现在似乎一切正常。
但我有一个困惑,我不知道它为什么会起作用。
再具体一点
devServer.historyApiFallback: true根据webpack doc是明确的,所以我不怀疑那部分。output.publicPath:/对我来说非常模糊。
问题:
- 如果我尝试使用
output.publicPath:/public之类的东西,它 不管用。那么为什么我必须在这里使用output.publicPath:/? -
output.publicPath:/如何告诉 webpack-devserver 找到 正确的位置和服务器正确的index.html(由 devserver 我相信)?
对不起,如果它有点乏味。我只是想提供一些细节。
【问题讨论】:
-
感谢提问和回答
标签: javascript reactjs webpack