鉴于此配置:
var webpack = require('webpack');
const path = require('path')
module.exports = {
entry: "./src/index.js",
output: {
path: path.join(__dirname, 'dist'),
publicPath: path.join(__dirname, 'dist'),
filename: "bundle.js"
},
devServer: {
contentBase: "./dist",
// hot: true,
}
}
为什么不能 webpack-dev-server 正确地服务我的应用程序?我对 localhost,vs localhost/webpack-dev-server,vs publicPath,vs contentBase 等有 0%的了解。我知道所有这些路径,配置键对于正确设置我的项目非常重要,但是尽管有几个小时阅读它们,它们仍然令人困惑就像我开始时一样。
如果我去localhost:8080/webpack-dev-server
,我会在控制台中看到Get http://localhost:8080/bundle.js
net:ERR_ABORTED`。
1 回答
以下是 webpack&webpack-dev-server 的简单直接规则:
output.path:它必须是绝对路径或
/
。您可以使用path.join
轻松搞定output.filename:这需要是输出文件的名称,没有任何额外的文件路径。
devServer.contentBase:当你打开
http://localhost:8080
时,它是磁盘上的物理位置,作为 webpack-dev-server 的根目录按照惯例,我们保持
output.path
和devServer.contentBase
相同。棘手的部分是当你运行webpack
cmd 时,它会生成物理bundle.js
文件。但是当你运行
webpack-dev-server
时,会生成NO PHYSICAL OUTPUT文件,而是将生成的输出保留在内存中以避免 File-Write 操作,从而有助于更快的 development/debugging 循环。因此,您在
src.js or main.js
文件中所做的任何更改,都会生成输出,但不会将其写入磁盘,wepack-dev-server 直接从内存中读取。/
。对 React-Router
<BrowserRouter basename='/app1'>
也有帮助现在要引用生成并保存在内存中的 bundle 输出文件,您需要追加
output.publicPath
i.e。Virtual Path
在浏览器的 URL 中。webpack-dev-server 的最终网址为:http://localhost:8080/<output.publicPath>/<output.filename>
在您的情况下,如果
publicPath: path.join(__dirname, 'dist')
包含任何空格,则将其更改为publicPath: '/dist'
。您可以通过打印返回绝对路径[_]的path.join(__dirname, 'dist')
的值来检查它。http://localhost:8080/dist/bundle.js
如果你想深入挖掘,那么这里是 URL
https://medium.com/p/webpack-understanding-the-publicpath-mystery-aeb96d9effb1