我的 webpack-dev-middleware 设置无法获取 / 错误
Posted
技术标签:
【中文标题】我的 webpack-dev-middleware 设置无法获取 / 错误【英文标题】:Cannot GET / error with my webpack-dev-middleware setup 【发布时间】:2017-10-29 05:53:36 【问题描述】:首先,我在这里发现了许多类似的主题,但即使参考了它们,我仍然无法让它发挥作用。
所以,我的问题很简单,就是当我在运行我的 express 服务器(使用 npm run serve
)后访问 localhost:3000
时,我在 Chrome 中得到了 Cannot GET /
。并不是找不到 bundle.js 文件;它根本找不到 index.html。
当我在 package.json 文件中运行 npm run serve
脚本时,我在服务器控制台上看不到任何错误。 Webpack 构建(从 Webpack-dev-middleware 调用)日志也没有显示错误。
如果我直接从终端运行 webpack-dev-server 并访问相同的 URL,它可以正常工作。 (我已经通过webpack.config.js
中的devServer
选项覆盖了主机和端口以匹配我在快速服务器中使用的主机和端口。)
我做错了什么?
文件夹结构
/client
/main.js
/dist
/index.html
/assets/
/server
/server.js
/webpack.config.js
/package.json
webpack.config.js
const path = require('path');
module.exports =
entry: './client/main.js',
output:
path: path.resolve(__dirname, 'dist/assets'),
filename: 'bundle.js',
publicPath: '/assets/'
,
module:
rules: [
use: 'babel-loader',
test: /\.jsx?$/,
exclude: /node_modules/,
,
use: ['style-loader', 'css-loader', 'sass-loader'],
test: /\.scss$/
]
,
devServer:
host: 'localhost',
port: 3000,
historyApiFallback: true,
contentBase: path.resolve(__dirname, 'dist'),
;
/dist/index.html
<!DOCTYPE html>
<html>
<head>
<title>Webpack-Dev-Middleware Test</title>
</head>
<body>
<div id="app-container">
</div>
<script src="/assets/bundle.js"></script>
</body>
</html>
/server/server.js
const express = require('express');
const path = require('path');
const app = express();
const port = process.env.PORT || 3000;
if (process.env.NODE_ENV !== 'production')
var webpackDevMiddleware = require("webpack-dev-middleware");
var webpack = require("webpack");
var config = require('./../webpack.config');
var compiler = webpack(config);
app.use(webpackDevMiddleware(compiler,
publicPath : config.output.publicPath,
));
else
app.use(express.static(path.resolve(__dirname + '/../dist/')));
app.get('*', (req, res) =>
res.sendFile(path.resolve(__dirname + '/../dist/index.html'));
);
app.listen(port, () => console.log('Started on port:', port));
【问题讨论】:
npm run serve
的脚本是什么?
@LeeHanKyeol nodemon server/server.js
你说的是development
(不是production
)环境?
@LeeHanKyeol 是的,在生产中,您不需要任何这些。我没有设置 NODE_ENV 变量,所以它进入了 webpack-dev-middleware 块。我在控制台上看到了 webpack 构建日志,所以它进入了正确的块。
【参考方案1】:
问题是你并没有真正在 webpack 块中的任何地方提供index.html
。您应该使用诸如 html-webpack-loader
之类的插件在内存上提供它或使用 express 的静态函数,我认为更可取(更多 webpack 方式)的解决方案是前者。
下面是使用html-webpack-loader
的例子。
(as one of the plugins in webpack config.)
new HtmlWebpackPlugin(
filename: 'index.html',
template: './dist/index.html',
title: 'Your website'
)
【讨论】:
知道了。谢谢!以上是关于我的 webpack-dev-middleware 设置无法获取 / 错误的主要内容,如果未能解决你的问题,请参考以下文章
如何使用带有羽毛/快递的 webpack-dev-middleware?
webpack-dev-server和webpack-dev-middleware的区别
用 express + webpack-dev-middleware/webpack-hot-middleware 替换 webpack-dev-server
javascript 使用Webpack-dev-middleware对Express.js配置示例,以允许后端身份验证。
为 Koa 框架封装 webpack-dev-middleware 中间件
webpack-dev-middleware 和 webpack-hot-middleware 实现express全栈热更新。