具有多个入口点的 Webpack watch() - 为未更改的文件发送捆绑包?

Posted

技术标签:

【中文标题】具有多个入口点的 Webpack watch() - 为未更改的文件发送捆绑包?【英文标题】:Webpack watch() with multiple entry points - emitting bundles for non-changed files? 【发布时间】:2017-07-20 05:56:48 【问题描述】:

在我的webpack.config.js 中,我有 3 个单独的入口点,一个用于 JS 包,一个用于 主 SCSS 包,一个用于 单独与主 SCSS 包没有关系的 SCSS 包

当我使用webpack.watch() API 时,出于某种原因,例如编辑 JS 源文件,不仅会重新编译 JS 包,还会重新编译 2 个 SCSS 包。这是为什么,以及如何停止这种行为并确保只重新编译已编辑的入口点?

这是一个问题的原因是我正在使用browsersync,并且对于 CSS 包重新编译我只是注入 CSS 而不是重新加载,但在 html/JS 上编辑它的重新加载。但是,如果我编辑 SCSS 并且它还重新编译 JS/HTML browsersync 会触发重新加载而不是 CSS 注入。

【问题讨论】:

确保cache 未被禁用。 你能在这里复制/粘贴你的 webpack 配置吗? 它仍然是真实的吗?我正在使用Webpack + Browsersync,对我来说,这样的情况运行良好。如果仍然对此感兴趣,我可以帮助你... 【参考方案1】:

在这种情况下,您需要一个文件来让 webpack 检测在每个不同的入口点上做了多少更改。

为此,您可以使用 commonsChunkPlugin 提供的 manifest 文件:

例如,如果您有以下入口点:

entry: 
   app: 'main.js', // main entry point
   vendor: ['jquery', 'react'] //Third libraries

您可以使用插件 CommonsChunkPlugin:

new wepack.optimize.CommonsChunkPlugin(
  name: ['vendor', 'manifest']
)

此配置会生成一个清单文件作为另一个输出。在这种情况下,如果您在 'app' 入口点进行更改,webpack 只会重新编译 main.js 输出包(根据 'filename' 格式在 'output' 配置中),因为供应商捆绑包已经相同。

您可以使用特定的入口点进行尝试。

【讨论】:

以上是关于具有多个入口点的 Webpack watch() - 为未更改的文件发送捆绑包?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用具有多个页面和入口点的 React 和 TypeScript 设置 chrome 扩展?

Webpack,多个入口点 Sass 和 JS

同一模块中有多个入口点的问题

使用 AOT 的 Angular 多入口点

webpack 之 webpack-dev-server

webpack 热重载的3种方式