gpt4 book ai didi

webpack - HtmlWebpackPlugin 对 webpack dev server 的影响

转载 作者:行者123 更新时间:2023-12-04 17:30:33 28 4
gpt4 key购买 nike

我在 React 项目上使用 Webpack,它看起来像 HtmlWebpackPlugin 影响 webpack dev server以一种我不明白的奇怪方式。
似乎可以让我浏览到 index.html无论该文件在代码库中的哪个位置,都无法单独使用开发服务器。
假设我有以下目录结构:

myproj/
|- package.json
|- webpack.config.js
|- src/
|- index.html
|- index.jsx
和一个 webpack.config.js看起来像这样的文件:
const path = require('path');

module.exports = {
entry: './src/index.jsx',

devServer: {
contentBase: __dirname
}
};
然后我运行 webpack-dev-server --mode=development .因为我有 devServer.contentBase设置为当前目录( myproj )和 index.html文件在里面 myproj/src ,我必须浏览到 http://localhost:8080/src/index.html查看我的网络应用程序。如果我尝试浏览 http://localhost:8080/index.html然后我得到一个 404。这对我来说很有意义。
然后我添加 HtmlWebpackPlugin , 里面什么都不改 webpack.config.js :
const HtmlWebpackPlugin = require('html-webpack-plugin');
....
plugins: [
new HtmlWebpackPlugin({
template: './src/index.html'
})
]
现在突然间我可以浏览到 http://localhost:8080/index.html 就好了。事实上,我可以打 http://localhost:8080/index.htmlhttp://localhost:8080/src/index.html .
那是怎么回事?做了什么 HtmlWebpackPlugin怎么做才能做到这一点?

最佳答案

好吧,我想我想通了。

TL; 博士

一旦添加 HtmlWebpackPlugin你应该从 index.html 中删除这一行:

<script type="text/javascript" src="main.bundle.js"></script>

并且只浏览到 http://localhost:8080/index.html .

乏味的细节:

一旦你加入 HtmlWebpackPlugin ,需要您的 index.html文件并在 <script> 中合并指向你的 webpack 包的标签。它提供来自 http://localhost:8080 的合并 html 文件.即使 index.html 也会这样做已经包含对包的引用。

该插件实际上并没有覆盖 index.html与合并版本。所以浏览到 http://localhost:8080/src/index.html只是向您显示该文件,因为它在磁盘上。

所以如果你的 src/index.html在添加 HtmlWebpackPlugin 之前,文件看起来像这样:
<body>
<div id="app">it worked</div>
<script type="text/javascript" src="main.bundle.js"></script>
</body>

然后在添加 HtmlWebpackPlugin 之后, 浏览到 http://localhost:8080给你这个合并版本:
<body>
<div id="app">it worked</div>
<script type="text/javascript" src="main.bundle.js"></script>
<script type="text/javascript" src="main.bundle.js"></script>
</body>

所以现在你将有两个对该包的引用,一个是你在文件中添加的,另一个是 HtmlWebpackPlugin添加。

浏览到 http://localhost:8080/src为您提供磁盘上的内容 src/index.html :
<body>
<div id="app">it worked</div>
<script type="text/javascript" src="main.bundle.js"></script>
</body>

但是,由于他整点使用 HtmlWebpackPlugin是让它为您插入包引用,这意味着您应该删除 <script>标签来自 src/index.html .这反过来意味着浏览到 src/index.html将不再工作,因为您不再有对您的包的引用!

你现在依赖出租 HtmlWepbackPlugin插入 <script>为您标记,这意味着您现在必须浏览到 http://localhost:8080/index.html获取它生成的版本。

网络包。是。疯狂的。

关于webpack - HtmlWebpackPlugin 对 webpack dev server 的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49983799/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com