WebPack手表编译每个文件



根据手表的WebPack文档

WebPack可以在更改时观看文件并重新编译。

在我的理解中,这意味着WebPack只会编译更改的文件。

我有一个看起来像这样的webpack.config.js

module.exports = {
    watch: true,
    watchOptions: {
        ignored: /node_modules/,
    },
    entry: {
        "first": './web/assets/js/first.tsx',
        "second": './web/assets/js/second.tsx',
    },
    // other stuff
}

现在,运行./node_modules/.bin/webpack时,输出日志使其看起来像所有文件均已编译

Webpack is watching the files…
Hash: d0ac7b9d70b906068f77
Version: webpack 4.3.0
Time: 10462ms
Built at: 3/29/2018 11:50:43 AM
              Asset       Size  Chunks             Chunk Names
    first.js    234 KiB       0  [emitted]  first
second.js  739 bytes       1  [emitted]  second
Entrypoint second = second.js
Entrypoint first = first.js
  [13] ../locale-data/index.js (ignored) 15 bytes {0} [built]
  [14] ./web/assets/js/react/component/First/First.tsx 1.05 KiB {0} [built]
  [15] ./web/assets/js/translations/tr.ts 4.83 KiB {0} [built]
  [16] ./web/assets/js/translations/it.ts 4.64 KiB {0} [built]
  [17] ./web/assets/js/translations/fr.ts 4.78 KiB {0} [built]
  [18] ./web/assets/js/translations/en.ts 4.31 KiB {0} [built]
  [19] ./web/assets/js/translations/de.ts 4.67 KiB {0} [built]
  [31] ./lib/locales (ignored) 15 bytes {0} [built]
  [37] ./lib/locales (ignored) 15 bytes {0} [built]
  [57] ./web/assets/js/first.tsx 559 bytes {0} [built]
  [58] ./web/assets/js/second.tsx 350 bytes {1} [built]
    + 48 hidden modules

现在,当我更改first.tsx中的某些内容时,输出相同。在我看来,每个文件都已重新编译,但我只希望已更改的条目重新编译。我在这里错过某些东西还是误会了什么?

我的目标是仅重新编译已更改的文件,这应该是webpack watch的工作方式。

更新:有关进一步的证明,我删除了两个编译文件,更改了一个输入点的行,而观察者仍将两者都编译。

Update2:这里有一些复制步骤

复制步骤:这些步骤假定您已经安装了yarn/npm

  • 查看我创建的存储库,您可以在https://github.com/tzfrs/webpack-watch-bug
  • 上找到。
  • 最初运行yarn installnpm install
  • 运行./node_modules/.bin/webpack。这应该在dist文件夹中创建两个文件并自动观看。
  • 删除dist/second.js
  • 更改src/first.js中的某些内容
  • src/second.js没有更改,但仍会重新编译(因为dist/second.js再次创建(。

webpack和类似的观察者将整个捆绑包放在内存中,并观看文件流。您可以认为这有点像异步减少。每次将数据推到流时,都会相应地更新累积的捆绑包,直到流关闭并结束。

如果它具有一个输出目录,则将捆绑包的最新状态(即整个捆绑包(写入每个更改的目录。但是,即使我们将其视为主要目标,但如果我们进行降低类比,它更像是"副作用"。

这并不意味着它重新编译了所有内容...实际上,意外的变化像不安全的删除一样实际上可能会打破观察者,这正是因为它每次都会发生任何变化时从头开始。P>

有关演示,请克隆更大的项目,并注意第一个编译(整个捆绑包(和后续(单个文件(更新之间的区别。

的时间应有的数量级差异。

最新更新