Webpack vs webpack-dev-server vs webpack-dev-middleware vs webpack-hot-middleware vs etc

我正在开始与一个环境合作,使用.我对开发和生产(运行时)环境的每个webpack包的作用感到非常困惑。webpacknode/expressReactJSreact-router

以下是我理解的总结:

webpack:是一个包,一个将Web应用程序的不同部分连接在一起的工具,然后捆绑在单个.js文件中(通常)。然后,在 prod 环境中提供结果文件,由应用程序加载,并包含运行代码所需的所有组件。功能包括收缩代码,缩小等。bundle.js

webpack-dev-server:是一个软件包,提供服务器来处理网站文件。它还从客户端组件生成单个.js文件 (),但在内存中提供该文件。它还具有监视所有构建文件的选项(),并在代码更改时在内存中构建新的捆绑包。服务器直接在浏览器中提供(例如:)。内存加载、热处理和浏览器服务的组合使用户能够在代码更改时在浏览器上更新应用程序,非常适合开发环境。bundle.js-hothttp:/localhost:8080/webpack-dev-server/whatever

如果我对上面的文字有疑问,我真的不确定下面的内容,所以如果有必要,请告诉我

与 一起使用时的一个常见问题是 服务器,就像 .这使得这个环境很难同时运行客户端和一些节点/快速代码(API等)。注意:这是我所面对的,但很高兴能理解为什么会更详细地发生这种情况......webpack-dev-servernode/expresswebpack-dev-servernode/express

webpack-dev-middleware:这是一个中间件,具有与(内存捆绑,热重载)相同的功能,但格式可以注入到应用程序中。这样,您就有了一种服务器()内部节点服务器。哎呀:这是一个疯狂的梦???这部分如何解决开发和生产方程式并使生活更简单webpack-dev-serverserver/expresswebpack-dev-server

webpack-hot-middleware:这...卡在这里...在寻找webpack-dev-middleware时发现了这篇文章...不知道如何使用它。

尾注:抱歉,有什么错误的想法。我真的需要帮助,以便在复杂的环境中取消这些变体。如果合适,请添加更多将构建整个场景的包/数据。


答案 1

webpack

正如你所描述的,Webpack是一个模块捆绑器,它主要捆绑各种模块格式,以便它们可以在浏览器中运行。它提供了CLINode API

webpack-dev-middleware

Webpack Dev 中间件是中间件,可以挂载在快速服务器中,以便在开发过程中提供捆绑包的最新编译。这在监视模式下使用 的 Node API,而不是输出到文件系统,而是输出到内存webpack

为了进行比较,您可以在生产中使用 express.static 之类的东西,而不是此中间件。

webpack-dev-server

Webpack Dev Server本身就是一个快速服务器,用于为最新的捆绑包提供服务,并额外处理客户端中实时模块更新的热模块替换(HMR)请求。webpack-dev-middleware

webpack-hot-middleware

Webpack Hot Middleware是一种替代方案,但它不是启动服务器本身,而是允许您将其与 一起安装在现有/自定义的 Express服务器中。webpack-dev-serverwebpack-dev-middleware

也。。。

webpack-hot-server-middleware

为了更加混淆事情,还有Webpack热服务器中间件,它被设计为与服务器渲染的应用程序一起使用并处理热模块替换。webpack-dev-middlewarewebpack-hot-middleware


答案 2

截至2018年更新,并考虑其官方GitHub页面上webpack-dev-server注释:

维护中的项目 请注意,webpack-dev-server 目前处于仅维护模式,短期内不会接受任何其他功能。大多数新功能请求都可以使用Express中间件完成;请查看文档中使用之前和之后的钩子。

构建webpack HMR的自然选择是什么?